我想使用PHP的round()函數向下舍入一個數字。這裏是我使用的代碼:意外的回合()返回
$line_item_price = 13.775;
echo round($line_item_price, 2, PHP_ROUND_HALF_DOWN);
現在,當我運行這樣的代碼,我希望能得到輸出13.77,除非我得到0(或沒有 - 不知道這還)。
現在,當我刪除PHP_ROUND_HALF_DOWN時,我得到13.78。有人看到我在這裏做錯了嗎?看起來這應該工作正常。
我想使用PHP的round()函數向下舍入一個數字。這裏是我使用的代碼:意外的回合()返回
$line_item_price = 13.775;
echo round($line_item_price, 2, PHP_ROUND_HALF_DOWN);
現在,當我運行這樣的代碼,我希望能得到輸出13.77,除非我得到0(或沒有 - 不知道這還)。
現在,當我刪除PHP_ROUND_HALF_DOWN時,我得到13.78。有人看到我在這裏做錯了嗎?看起來這應該工作正常。
模式參數是在5.3版本中引入的,因此它不適用於您。你必須找到一個自定義函數來做你正在尋找的東西。
你能不能只是做:
echo round($line_item_price, 2)
?
我不是100%確定,但我認爲ROUND_HALF_DOWN等是分數,如1.5,2.5和整數。
這給了我13.78。我想要13.77。 –
我的歉意,給我一點時間 – martincarlin87
我能想到的唯一事情就是檢查變量的最後一位是否是5,如果是這樣,你可以刪除它。不知道這對你是否有用。 – martincarlin87
您正在使用當前版本的PHP中尚未提供的函數。解決此問題的一種方法是使用floor
函數。
$line_item_price = 13.775;
echo floor($line_item_price * 100)/100;
我在這裏做的事情是先將數值乘以100,然後確定數值。這會給你一個向下取整數值爲2。精準然後讓你需要100
100來自power(10, desired precision)
這裏是一個辦法做到這一點的數量devide正確的值:
$num = 13.775;
$tmp = intval($num*1000);
$dec = $tmp % 10;
if ($dec > 5) {
$rounded = (1+intval($tmp/10))/100;
} else {
$rounded = intval($tmp/10)/100;
}
echo $rounded,"\n";
這給:13.77
爲$num=13.775
和13.78
爲$num=13.776
其實,我有點驚訝的是,它在所有工作,自號13.775無噸浮點精確表示:
$ php -r 'printf("%.40f\n", 13.775);'
13.7750000000000003552713678800500929355621
事實上,似乎round()
有點鬆懈「半」什麼罪名:
$ php -r 'echo round(13.77500000000001, 2, PHP_ROUND_HALF_DOWN) . "\n";'
13.77
無論如何,如果你的PHP不支持PHP_ROUND_HALF_DOWN
,這裏有一個簡單的克魯格給出大致相同的功能:
function round_half_down ($num, $digits) {
$mul = pow(10, $digits);
return ceil($num * $mul - 0.5)/$mul;
}
這不變成工作的人會天真地想到,卻是嚴格一些比round()
:round_half_down(13.775, 2) == 13.77
,但是round_half_down(13.77500000000001, 2) == 13.78
。此外,作爲一個奇怪的邊緣情況下,round_half_down(0.001, 2)
返回-0
。如果你不喜歡這個,你可以通過sprintf("%.{$digits}F")
來傳遞返回值以很好地格式化它。
你至少運行PHP 5.3嗎? –
我正在運行5.2.10 –
模式參數是在5.3版本中引入的,因此它不適用於您。你必須找到一個自定義函數來做你正在尋找的東西。 –