PHP:number_format舍入

时间:2014-12-24 11:58:27

标签: php floating-point rounding

您好我将数字四舍五入为 -0 而不仅仅是 0

代码:

<?php
$num= 0.000000031;

$round = number_format((float)$num, 1, '.', '');

echo $round * -1;
?>

输出: 的 -0

预期产量: 的 0

我一直在寻找任何解决方案,但一无所获。

请解释&amp;帮助我为什么它会转向 -0 而不是 0 ?谢谢

3 个答案:

答案 0 :(得分:6)

不是舍入使它成为-0。

$ round变量在最后一行之前包含这个:

string(3) "0.0"

您可以通过添加以下行来验证这一点:

var_dump($round);
在回声之前

因此,如果将“0.0”(字符串)乘以-1,则结果将为“-0”

因为(字符串)0在乘法和

之前被转换为(float)0
(float)0 * -1 = -0

php5 -r 'var_dump((float)0*-1);'
float(-0)

根据浮点数行为,这是完全正常的。 (更多细节:http://en.wikipedia.org/wiki/Signed_zero

如果这是一个问题,你可以添加0以​​避免这种“魔法”:

php5 -r 'var_dump((float)0*-1+0);'
float(0)

答案 1 :(得分:0)

你的PHP代码是无序的。

我假设第二行的var $ xx是$ num。

然后,您必须首先执行所有操作(操作层),然后执行演示(表示层):

<?php
    // Operation layer
    $num = 0.000000031;
    $round = $num * -1;

    // Presentation layer
    echo number_format($round, 1, '.', '');

当你执行number_format检索字符串而不是数字时。

答案 2 :(得分:0)

由于number_format返回字符串,因此需要将其强制转换以获得预期结果。

<?php

$num= 0.000000031;

$round = number_format((float)$num, 1, '.', '');

echo (int)$round * (-1);  //print 0 

?>

PHP Sandbox