我從數據庫中得到一個數字,這個數字可能是float
或int
。
我需要數的小數精度設置爲3
,這使得不超過(關於小數)5.020
或1518845.756
數量。在PHP中設置浮點數的精度
使用PHP
round($number, $precision)
我看到一個問題:
這輪數。我需要一個函數來減小小數點,而不改變它們的值,round()
似乎沒有遵循。
我從數據庫中得到一個數字,這個數字可能是float
或int
。
我需要數的小數精度設置爲3
,這使得不超過(關於小數)5.020
或1518845.756
數量。在PHP中設置浮點數的精度
使用PHP
round($number, $precision)
我看到一個問題:
這輪數。我需要一個函數來減小小數點,而不改變它們的值,round()
似乎沒有遵循。
您可以使用number_format()
來實現這一目標:
這將轉換1518845.756789
到1518845.757
。
但如果你只是想小數數切斷短至3,和不輪,那麼你就可以做到以下幾點:
$number = intval($number * ($p = pow(10, $precision)))/$p;
它可能首先看嚇人,但這個概念非常簡單。你有一個數字,你乘以10 (它變成1518845756.789
),將其轉換爲一個整數,因此在小數點後3位的所有數據都被刪除(變成1518845756
),然後除以10 1518845.756
)。
如果我理解正確的話,你不會想四捨五入發生,你想的精度爲3。
這樣的想法是使用number_format()
爲精密4,然後刪除最後一個數字:
$number = '1518845.756789';
$precision = 3;
echo substr(number_format($number, $precision+1, '.', ''), 0, -1);
顯示:
1518845.756
,而不是:
1518845.757
如果第4個小數點是「9」,並且第5個小數點將導致它翻轉,則這將不起作用。例如,用'$ number ='0.00096''來嘗試。 –
這不工作,如果'INTVAL($數*($ P ...))'不能表示爲整數。例如:'$ number = 10000000; $ precision = 3;'在32位機器上產生'1410065.408'。 –
@NisseEngström我不知道你在做什麼,因爲你從一個整數開始,並以廢話結束...... – arod
@arod:這是*我的*點。如果* number *×*乘數*太大而不能表示爲整數,那麼最終會導致無意義。在64位機器上,你需要更大的數字和精度來結束無意義的值。 –