[英]PHP: number_format rounding
嗨,我一直有一个问题将数字四舍五入到-0而不是一个0
码:
<?php
$num= 0.000000031;
$round = number_format((float)$num, 1, '.', '');
echo $round * -1;
?>
输出: -0
预期产量: 0
我一直在寻找任何解决方案,但没有找到。
亲切地解释并帮助我为什么它会向上舍入到-0而不是0 ? 谢谢
舍入不是-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)
你PHP代码它没有组织。
我假设第二行的var $ xx是$ num。
然后,您必须首先执行所有操作(操作层),然后执行演示(表示层):
<?php
// Operation layer
$num = 0.000000031;
$round = $num * -1;
// Presentation layer
echo number_format($round, 1, '.', '');
当你执行number_format检索字符串而不是数字时。
由于number_format返回字符串,因此需要将其强制转换以获得预期结果。
<?php
$num= 0.000000031;
$round = number_format((float)$num, 1, '.', '');
echo (int)$round * (-1); //print 0
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.