我有一个小问题,它可能在某个地方很傻,但我仍然拥有它:)
所以问题是:
通过这样做
round(615.36*0.10, 2, PHP_ROUND_HALF_DOWN);
我希望结果为61.53
,但它是61.54
。
phpVersion = 5.3.2
有人可以帮我解决这个问题吗? 感谢。
答案 0 :(得分:11)
PHP_ROUND_HALF_DOWN
将围绕一半 - 即0.005
部分。
如果你有61.535
,使用PHP_ROUND_HALF_DOWN
会获得61.53
- 而不是你应该通过通常的舍入获得的61.54
。
Basicall,.005
一半已经四舍五入。
但 61.536
不是一半:.006
超过.005
;所以舍入该值会给61.54
。
在你的情况下,你可以将值乘以100,使用floor()函数,并将结果除以100 - 我想它会给你你期望的结果:
$value = 61.536;
$value_times_100 = $value * 100;
$value_times_100_floored = floor($value_times_100);
$value_floored = $value_times_100_floored / 100;
var_dump($value_floored);
给我:
float(61.53)
答案 1 :(得分:2)
如果你想要向下舍入,你需要使用floor(),它没有指定精度的方法,所以它必须解决,例如。与
function floor_prec($x, $prec) {
return floor($x*pow(10,$prec))/pow(10,$prec);
}
答案 2 :(得分:1)
你显然只想要两位小数,为什么不只是number_format(615.36 * 0.10,2)