В PHP как вывести число с двумя десятичными знаками, но только если уже есть десятичные? - PullRequest
3 голосов
/ 13 апреля 2011

У меня есть базовая страница index.php с некоторыми переменными, которые я хочу напечатать в нескольких местах - вот переменные:

<?php
  $firstprice = 1.50;
  $secondprice = 3.50;
  $thirdprice = 20;
?>

Моя проблема заключается в том, что позже в документе, когда я печатаю,Я получаю цены без второго «0» в цене - вот что происходит:

<?php print "$firstprice";?> // returns 1.5 - not 1.50!

ТАК - я знаю, как это сделать с JS, но как это сделать в PHP 5+?По сути, я хочу напечатать второе «0», если уже есть десятичное число, поэтому, если переменная равна «3», она остается равной «3», но если она равна «3,5», она преобразуется в «3,50»со вторым '0' и т. д.

Вот пример JS - каков эквивалент PHP?

JS:

.toFixed(2).replace(/[.,]00$/, ""))

Большое спасибо !!

Ответы [ 6 ]

10 голосов
/ 13 апреля 2011

Это просто, и это также позволит вам настроить формат по вкусу:

$var = sprintf($var == intval($var) ? "%d" : "%.2f", $var);

Она отформатирует переменную как целое число (%d), если у нее нет десятичных дробей, и ровно с двумядесятичные цифры (%.2f), если он имеет десятичную часть.

См. это в действии .

Обновление: Как указывает Архимедикс,это приведет к отображению 3.00, если входное значение находится в диапазоне (2.995, 3.005).Вот улучшенная проверка, которая исправляет это:

$var = sprintf(round($var, 2) == intval($var) ? "%d" : "%.2f", $var);
5 голосов
/ 13 апреля 2011
<?php

$number = 1234.56;

// english notation (default)
$english_format_number = number_format($number);
// 1,235

// French notation
$nombre_format_francais = number_format($number, 2, ',', ' ');
// 1 234,56

$number = 1234.5678;

// english notation without thousands seperator
$english_format_number = number_format($number, 2, '.', '');
// 1234.57

?>

подробнее здесь http://php.net/manual/en/function.number-format.php

3 голосов
/ 13 апреля 2011

Вы можете использовать

   if (is_float($var)) 
   {
     echo number_format($var,2,'.','');
   }
   else
   {
     echo $var;
   }
1 голос
/ 13 апреля 2011

Что-то вроде этого:

$value = 15.2; // The value you want to print

$has_decimal = $value != intval($value);
if ($has_decimal) {
    echo number_format($value, 2);
}
else {
    echo $value;
}


Примечания:

  • Вы можете использовать number_format() для форматирования значения с точностью до двух десятичных знаков
  • А если значение является целым числом, просто отобразите его.
0 голосов
/ 11 сентября 2015

Альтернативный способ печати

$number = sprintf('%0.2f', $numbers); 
   // 520.89898989 -> 520.89
0 голосов
/ 13 апреля 2011

вы можете использовать число_формат ():

echo number_format($firstprice, 2, ',', '.');
...