2011-04-13 13 views
6

我有個小問題,它可能是愚蠢的地方,但我仍然有它:)傻,想不通PHP回合下來:(

所以問題是:

通過這樣做

round(615.36*0.10, 2, PHP_ROUND_HALF_DOWN); 

我預計結果是61.53,但它是61.54

phpVersion = 5.3.2 

任何人都可以幫助我解決這個問題嗎? 謝謝。

回答

11

PHP_ROUND_HALF_DOWN將圍繞一半 - 即0.005部分。

如果你有 61.535

,使用PHP_ROUND_HALF_DOWN將讓你61.53 - 而不是61.54你應該平時四捨五入取得。
Basicall,.005half已被舍入。

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) 
+0

是啊,我告訴你,這將是愚蠢的:d – arma 2011-04-13 11:07:35

1

你明明只希望它有兩位小數爲什麼不只是number_format(615.36 * 0.10,2)

+0

是啊,這正是我想要的,但因爲不是我的問題,我只能給你給予好評。謝謝 – arma 2011-04-13 11:09:25

+0

它不起作用,因爲它湊了:'float 15.315315315315' =>'string '15 .32'' – Yvan 2016-12-13 10:55:08

2

如果你想要捨去,你需要使用floor(),它沒有方法來指定精度,所以它必須被解決,例如。與

function floor_prec($x, $prec) { 
    return floor($x*pow(10,$prec))/pow(10,$prec); 
} 
+0

太棒了!謝謝! – arma 2011-04-13 11:13:25