【问题标题】:Using number_format to get decimals使用 number_format 获取小数
【发布时间】:2013-05-30 21:06:02
【问题描述】:

我想总结一些值并再次检查另一个数字,如下所示:

$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 部分是我正在使用的 selenium 函数,所以不要考虑这一点,它只是应该检查 2 个值是否相同。现在我得到的结果是:

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

为什么我会丢失小数点的值?

【问题讨论】:

标签: php decimal number-formatting


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你不应该使用“,”作为小数点它不是excel。在 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(零)。

    【讨论】:

    • Thnaks,我从页面的不同部分检索了值,并且在页面上它们显示为“,”而不是“。”,但是一个简单的 str_replace 修复了它。谢谢
    • 不客气 :) 你总是可以使用 is_float() 函数来检查它是否是正确的浮点数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多