到目前為止,我們已經看到了為什么在PHP中使用float值時會發生這種奇怪的行為。現在來看看我們如何在PHP中處理這些浮點值。
首先,我們將看到如何在比較浮點值的同時陷入浮動值的陷阱。我們將通過代碼示例以更好的方式理解這一點。請參考下面的幾個代碼塊來檢查相同:
1 2 3 4 | $ a = 5.69 ; $ b = 5.69 ; var_dump ($ a == $ b ); //輸出:bool(true) |
在上面的代碼塊中,我們可以看到兩個值都相同并給出了正確的結果。現在讓我們檢查PHP中比較float值的棘手部分。
1 2 3 4 | $ a = 5.63 + 0.06 ; $ b = 5.69 ; var_dump ($ a == $ b ); //輸出:bool(false) |
在比較浮點值時,快速簡單地解決此問題的方法是將其轉換為字符串并比較這些值。現在它將比較兩個字符串,它沒有任何精度錯誤。
1 2 3 4 | $ a = (字符串) (5.63 + 0.06 ); $ b = (字符串) 5.69 ; var_dump ($ a == $ b ); //輸出:bool(true) |
如果您認為(像我一樣)轉換為字符串會給我們一個正確的結果。但不是理想的解決方案,那么下一個解決方案就是為您服務。
要獲得上述問題的解決方案,我們需要安裝PHP的BCMath PHP擴展。您可以閱讀本文,了解如何在PHP中安裝PHP BCMath。
完成BCMath擴展安裝后,可以使用下面的代碼并獲得正確的結果。我們將使用bcadd方法而不是直接求和。
1 2 3 4 | $一個 = bcadd (5.63 , 0.06 , 2 ); $ B = bcadd (5.69 , 0 , 2 ); var_dump ($ a == $ b ); //輸出:bool(true) |
讓我們看看同一種情況的另一個例子: