在PHP中,如何打印一个带有2位小数的数字,但只有在已经有小数的情况下?

时间:2011-04-13 11:11:07

标签: php javascript decimal

我有一个基本的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$/, ""))

非常感谢!!

5 个答案:

答案 0 :(得分:10)

这很简单,它还可以让你调整格式:

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

如果变量没有小数,它会将变量格式化为整数(%d),如果它有小数部分,则将其精确地设置为两位小数(%.2f)。

See it in action

更新:正如Archimedix指出的那样,如果输入值在3.00范围内,则会显示(2.995, 3.005)。这是一个改进的检查,修复了这个问题:

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

答案 1 :(得分:5)

<?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

答案 2 :(得分:3)

您可以使用

   if (is_float($var)) 
   {
     echo number_format($var,2,'.','');
   }
   else
   {
     echo $var;
   }

答案 3 :(得分:1)

这样的事情:

$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()将值格式化为两位小数
  • 如果值是整数,只需显示它。

答案 4 :(得分:0)

您可以使用number_format():

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