傻,无法弄清楚PHP圆了下来:(

时间:2011-04-13 10:57:52

标签: php

我有一个小问题,它可能在某个地方很傻,但我仍然拥有它:)

所以问题是:

通过这样做

round(615.36*0.10, 2, PHP_ROUND_HALF_DOWN);

我希望结果为61.53,但它是61.54

phpVersion = 5.3.2

有人可以帮我解决这个问题吗? 感谢。

3 个答案:

答案 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)