我一直摔跤與PHP的小區(浮法)功能讓我稍微錯誤的結果 - 考慮以下幾點:PHP小區給出錯誤的結果,如果輸入的是不帶小數
$num = 2.7*3; //float(8.1)
$num*=10; //float(81)
$num = ceil($num); //82, but shouldn't this be 81??
$num/=10; //float(8.2)
我有一些這可能有任何小數位數,我需要它四捨五入到小數點後一位。 即8.1應該是8.1,8.154應該是8.2,8應該保留爲8.
我到那裏的方式是將數乘以10,ceil(),然後除以十但正如您所看到的,在某些情況下,我會添加額外的.1。
任何人都可以告訴我爲什麼發生這種情況,以及如何解決它?
任何幫助,不勝感激編輯
:必須的+ = 10,而不是* = 10:S
編輯2: 我並沒有明確提到這一點,但我需要總是四捨五入小數,從來沒有下降 - 這個答案是迄今爲止最接近:
rtrim(rtrim(sprintf('%.1f', $num), '0'), '.');
然而,當我需要3.9時,輪數3.84下降到3.8。 對不起,這不是更清晰:(
最後編輯:最後我做什麼是這個
:
$num = 2.7*3; //float(8.1)
$num*=10; //float(81)
$num = ceil(round($num, 2)); //81 :)
$num/=10; //float(8.1)
其中一期工程:)
這給了2位小數,我需要1 - 此代碼工作:回聲rtrim(rtrim(sprintf('%。1f',$ num),'0'),'。');否則,很好的答案,謝謝 – jammypeach
哦,我讀了「兩位小數」出於某種原因。 – erisco