php浮點(diǎn)數(shù)的精度
Q:php商城項(xiàng)目中使用 floor()向下取整,出現(xiàn)問(wèn)題咸灿,floor(580.8/110*100)/100的出的結(jié)果是5.27 ,但是該算數(shù)的結(jié)果應(yīng)該是5.28才對(duì),還好前期發(fā)現(xiàn)巢寡,不然公司盈利巨虧
W:
引自:http://www.cnblogs.com/wolfgang-/p/6635404.html
浮點(diǎn)數(shù)的精度有限谓媒。盡管取決于系統(tǒng),PHP 通常使用 IEEE 754 雙精度格式薄风,則由于取整而導(dǎo)致的最大相對(duì)誤差為 1.11e-16。非基本數(shù)學(xué)運(yùn)算可能會(huì)給出更大誤差拍嵌,并且要考慮到進(jìn)行復(fù)合運(yùn)算時(shí)的誤差傳遞遭赂。
此外,以十進(jìn)制能夠精確表示的有理數(shù)如 0.1 或 0.7横辆,無(wú)論有多少尾數(shù)都不能被內(nèi)部所使用的二進(jìn)制精確表示撇他,因此不能在不丟失一點(diǎn)點(diǎn)精度的情況下轉(zhuǎn)換為二進(jìn)制的格式。這就會(huì)造成混亂的結(jié)果:例如狈蚤,floor((0.1+0.7)*10) 通常會(huì)返回 7 而不是預(yù)期中的 8困肩,因?yàn)樵摻Y(jié)果內(nèi)部的表示其實(shí)是類似 7.9999999999999991118…。
所以永遠(yuǎn)不要相信浮點(diǎn)數(shù)結(jié)果精確到了最后一位脆侮,也永遠(yuǎn)不要比較兩個(gè)浮點(diǎn)數(shù)是否相等锌畸。如果確實(shí)需要更高的精度,應(yīng)該使用任意精度數(shù)學(xué)函數(shù)或者 gmp 函數(shù)靖避。
GMP函數(shù)
http://php.net/manual/en/book.gmp.php
php 處理高精度計(jì)算函數(shù) 金額計(jì)算
建議:在php項(xiàng)目重要的數(shù)據(jù)中盡量少用或者不用浮點(diǎn)數(shù)