我得到了一些我想要总结的值,并再次检查另一个数字:
$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'
为什么我会丢失小数值?
答案 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
值才能使用点。