我希望我的變量的第一個小數總是四捨五入。例如:第一個小數總是舍入
9.66 goes to 9.7
9.55 goes to 9.6
9.51 goes to 9.6
9.00000001 goes to 9.1
我該怎麼做?
我希望我的變量的第一個小數總是四捨五入。例如:第一個小數總是舍入
9.66 goes to 9.7
9.55 goes to 9.6
9.51 goes to 9.6
9.00000001 goes to 9.1
我該怎麼做?
使用
round()
具有任選的精度和圓類型參數,例如:
round($value, 1, PHP_ROUND_HALF_UP)
可選的第二個參數是
round()
精度參數,並將它指定舍入到小數的位數。第三個可選參數指定舍入模式。有關詳細信息,請參見
PHP manual for round
。
使用round()
不總是圓向上,使用PHP_ROUND_HALF_UP即使當(例如9.00001未舍入爲9.1)。你可以改爲嘗試用乘法,ceil()
和除法:
ceil($value * 10.0)/10.0
由於這些都是浮點值,你可能無法得到精確的結果。
我已經使用過圓形,但當第三個(或更多)小數點低於5時,它總是向下舍入。我還查看了精度參數,但找不到任何有用的東西。 –
我認爲它不能像指定的那樣工作。 'echo'9.00000001 =>'.round(9.00000001,1,PHP_ROUND_HALF_UP).PHP_EOL;'對於我輸出的結果是9. –
[This question](http://stackoverflow.com/q/36324171/3919155)也可能幫助你,但我編輯了我的答案(再次)爲你的問題提供一個簡單的替代解決方案。 – jotik
您將需要一個自定義的ceil()函數,您的需求不能通過默認函數或圓形來滿足。
我不是一個PHP程序員,所以將不得不在「步驟」中回答。你遇到的問題就是邊界情況,你有一個精確到一位小數的數字。 (如9.5)
這裏是你如何能做到這一點:
對於步驟(2)劃分的結果,PHP文檔周圍嗅探揭示的功能bool is_int (mixed $var)
來測試的整數。
我做了幾個測試,並提出如下回答測試用例
<?php
echo '9.66 (expected 9.7) => '.myRound(9.66).PHP_EOL;
echo '9.55 (expected 9.6) => '.myRound(9.55).PHP_EOL;
echo '9.51 (expected 9.6) => '.myRound(9.51).PHP_EOL;
echo '9.00000001 (expected 9.1) => '.myRound(9.00000001).PHP_EOL;
echo '9.9 (expected ??) => '.myRound(9.9).PHP_EOL;
echo '9.91 (expected ??) => '.myRound(9.91).PHP_EOL;
function myRound($value)
{
return ceil($value*10)/10;
}
這裏的問題是9.91的結果應該是什麼?我認爲它應該是10。 –
使用此:online test
您可以使用此技術。只需爆炸給定的數字/字符串,即可得到.
的下一個值/數字的數字。得到這個之後,你需要增加這個值並檢查這個值是否大於9或者是否,如果然後除以該值並且將該進位加到主數字的第一部分。
$var = '9.96';
$ar = explode(".", $var);
$nxt = substr($ar[1], 0, 1) + 1;
if($nxt > 9){
$tmp = (string) $nxt;
$num = floatval(($ar[0] + $tmp[0]).".".$tmp[1]);
}
else
$num = floatval($ar[0].".".$nxt);
var_dump($num); // float(10)
關於[舍入](http://stackoverflow.com/q/12277945/3919155)的相似問題。 – jotik