鑑於以下鱈魚:樓功能不能正常工作
$number = 1050.55;
var_dump($number - floor($number));
爲什麼上面的代碼返回下面的結果呢?
float(0.54999999999995)
我想要一個固定值,如0.55在這種情況下。你能幫我嗎?
鑑於以下鱈魚:樓功能不能正常工作
$number = 1050.55;
var_dump($number - floor($number));
爲什麼上面的代碼返回下面的結果呢?
float(0.54999999999995)
我想要一個固定值,如0.55在這種情況下。你能幫我嗎?
浮點運算不精確,其餘錯誤很常見。 如果你知道,你想要的精確度是多少(例如點後兩位數),你可以對結果使用round()函數。 在這種情況下,這將是:
$number = 1050.55;
var_dump(round($number - floor($number), 2));
對於大多數浮筒,二進制只能近似表示正確的號碼。規則是在一系列計算中執行floor(),ceil()或fmod()最後。在使用它們之後,至少只能做整數運算。如果你將一個int賦給float,就像你的代碼一樣,那麼floor()就不會像你期望的那樣表現出來。
打印浮標時使用printf()。它的轉換例程通常做得更好,並在截斷浮動數據時給出您所期望的答案。
編輯:或者,更確切地說,printf()在確定截斷位置時用於數字的十進制字符表示,因此您不會看到任何奇怪的,未指定的二進制/十進制轉換構件。
浮點運算並不總是精確的。這麼多重複... – Ryan
你只是在尋找其餘的? –
是的,只剩下 –