Вопрос

я хочу использовать number_format функция в PHP.Например:

$number = 234.51;
echo number_format($number,2);

Это работает для чисел с плавающей запятой, но я хочу использовать его для разных чисел.Если число десятичное и не содержит плавающих точек, оно выглядит следующим образом:145.00 .Как я могу это исправить?Я имею в виду, что хочу показать столько плавающих точек, сколько необходимо, а не больше.

Это было полезно?

Решение 2

Я думаю, что не могу получить то, что хочу, от Number_format, поэтому я сделал это, и все работает нормально:

 public function floatNumber($number)
 {
      $number_array = explode('.', $number);
      $left = $number_array[0];
      $right = $number_array[1];
      return number_format($number, strlen($right));
 }

спасибо всем за ваши ответы.

Другие советы

Расследовать printf и sprintf функции вместо number_format.

Они дают возможность форматировать числа по вашему желанию.

printf("%d", $int) 

будет подходящим для десятичного целого числа.

printf("%4.2f", $float) 

будет подходящим для числа с плавающей запятой с двумя десятичными знаками.

number_format кажется, предназначен для интернационализации выпуска валюты, но я не думаю, что вы этого хотите, потому что вы упомянули десятичные «целые» числа.

Я не знаю лучшего способа сделать это, но вы можете сравнить тип, как показано в коде ниже:

$number = 234.159;
if(is_float($number)) {
 echo number_format($number, 2);
}else {
 echo $number;
}

Хотя это немного быстро и грязно, вы можете просто сделать...

str_replace('.00', '', number_format($potentialFloat, 2));

Далеко от идеала, но эффективно.

Я думаю, что ключевая проблема заключается в определении необходимого количества должностей.Вы бы определили 13.01 как 13, потому что первая десятичная цифра была 0?Поскольку формат printf и числовой формат требует, чтобы вы знали, сколько десятичных знаков, я не уверен, что это вам подойдет.

Может быть что-то вроде этого (функций много, но ищет первый 0, а потом возвращает усеченную строку).Да, это интенсивно, но, возможно, это лучший способ для вас.

function show_number($number, $max = 8){
  if(strpos($number, '.')){
    $decimal = strpos($number, '.');
    if(strpos($number, '.0')){
      return substr($number, 0, $decimal);//returns whole if zero is first
    } else {
      if(strpos(substr($number, $decimal, $max), '0')){
        $zero = strpos(substr($number, $decimal, $max), '0');
        return substr($number, 0, $decimal+$zero);//returns number w/0 first zero
      } else {
        return substr($number, 0, $decimal+$max+1); //returns number with max places
      }
    }
  } else {
    return $number; //returns number if no decimals
  }
}
rtrim(number_format($number, 2), '0.');

Я использую следующее, чтобы избавиться от конечных нулей:

// Trims a floating point number so there are no trailing zeros. For example:
// 1.00 -> 1
// 1.10 -> 1.1
function trimFloatingPoint($input) {
    $strNum = strval($input);

    while(substr($strNum, -1, 1) == '0')
        $strNum = substr($strNum, 0, strlen($strNum) -1);

    // Trailing zeros are gone. How about the trailing period?
    if(substr($strNum, -1, 1) == '.')
        $strNum = substr($strNum, 0, strlen($strNum) -1);

    return $strNum;
}
$x = $x - floor($x)

даст вам правильную плавающую точку...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top