使用number_format获取小数

时间:2013-06-04 12:51:13

标签: php decimal number-formatting

我得到了一些我想要总结的值,并再次检查另一个数字:

$a = '15';
$b = '5,50';
$c = '-10';
$to_pay = '10,50';
$formated_total = number_format(($a+$b+($c)), 2, ',', ' ');
$this->assertEquals($to_pay, $formated_total);

asser部分是我正在使用的硒功能,所以不要考虑,它只是应该检查2个值是否相同。现在我得到的结果是:

 - Expected
 + Actual
 -'10,50'
 +'10,00'

为什么我会丢失小数值?

2 个答案:

答案 0 :(得分:3)

你不应该使用","作为小数点,它并不出色。在PHP中,您需要使用DOT

将您的号码更改为:

$a = '15';
$b = '5.50';
$c = '-10';
$to_pay = '10.50';

甚至更好的解决方案是将它们视为数字而不是字符串

将您的号码更改为:

$a = 15;
$b = 5.50;
$c = -10;
$to_pay = 10.50;

如果您尝试使用,代替.

,那么您会收到错误

您还可以简化此行:

$formated_total = number_format(($a+$b+($c)), 2, ',', ' ');

$formated_total = number_format($a+$b+$c, 2, ',', ' ');

你可能很好奇为什么结果是10.这是因为在将它转换为数字时,php解析器在5,50中检查开头的数字是5并忽略其余的数字。

来自manual

  

如果字符串以有效数字数据开头,则这将是使用的值。否则,该值将为0(零)。

答案 1 :(得分:2)

因为逗号不是有效的小数点。您需要“转换”$b$to_pay值才能使用点。