您好,登錄后才能下訂單哦!
這篇文章給大家介紹PHP中浮點(diǎn)運(yùn)算不準(zhǔn)確如何解決,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
首先看一段代碼:
<?php $a = 0.1; $b = 0.7; var_dump(($a + $b) == 0.8);
打印出來的值居然為 boolean false
這是為啥?PHP手冊(cè)對(duì)于浮點(diǎn)數(shù)有以下警告信息:
Warning
浮點(diǎn)數(shù)精度
顯然簡單的十進(jìn)制分?jǐn)?shù)如同 0.1 或 0.7 不能在不丟失一點(diǎn)點(diǎn)精度的情況下轉(zhuǎn)換為內(nèi)部二進(jìn)制的格式。這就會(huì)造成混亂的結(jié)果:例如,floor((0.1+0.7)*10) 通常會(huì)返回 7 而不是預(yù)期中的 8,因?yàn)樵摻Y(jié)果內(nèi)部的表示其實(shí)是類似 7.9999999999...。
這和一個(gè)事實(shí)有關(guān),那就是不可能精確的用有限位數(shù)表達(dá)某些十進(jìn)制分?jǐn)?shù)。例如,十進(jìn)制的 1/3 變成了 0.3333333. . .。
所以永遠(yuǎn)不要相信浮點(diǎn)數(shù)結(jié)果精確到了最后一位,也永遠(yuǎn)不要比較兩個(gè)浮點(diǎn)數(shù)是否相等。如果確實(shí)需要更高的精度,應(yīng)該使用任意精度數(shù)學(xué)函數(shù)或者 gmp 函數(shù)
那么上面的算式我們應(yīng)該改寫為<?php$a = 0.1;$b = 0.7;var_dump(bcadd($a,$b,2) == 0.8);這樣就能解決浮點(diǎn)數(shù)的計(jì)算問題了
關(guān)于PHP中浮點(diǎn)運(yùn)算不準(zhǔn)確如何解決就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。