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