《PHP應(yīng)用:總結(jié)PHP中數(shù)值計(jì)算的注意事項(xiàng)》要點(diǎn):
本文介紹了PHP應(yīng)用:總結(jié)PHP中數(shù)值計(jì)算的注意事項(xiàng),希望對(duì)您有用。如果有疑問,可以聯(lián)系我們。
一:四舍五入
PHP實(shí)戰(zhàn)
1.round ― 對(duì)浮點(diǎn)數(shù)進(jìn)行四舍五入PHP實(shí)戰(zhàn)
float round ( float $val [, int $precision ] )
2:floor ― 舍去法取整(向下取整)PHP實(shí)戰(zhàn)
float floor ( float $value )
3.ceil ― 進(jìn)一法取整(向上取整)PHP實(shí)戰(zhàn)
float ceil ( float $value )
坑點(diǎn): 當(dāng)數(shù)值為整數(shù)的時(shí)候 例如 11 那么floor(11) = 10? , ceil (11) =? 12; 問題顯而易見,所以計(jì)算的時(shí)候要格外注意這一點(diǎn)PHP實(shí)戰(zhàn)
解決方法?: floor(11 + 0.01);PHP實(shí)戰(zhàn)
二:整數(shù)和小數(shù)相乘除PHP實(shí)戰(zhàn)
坑點(diǎn):3.5 * 100 = 300 ,就算你數(shù)學(xué)再好也沒用,在php世界里這就是真理,如果用php的+-*/計(jì)算浮點(diǎn)數(shù)的時(shí)候,可能會(huì)遇到一些計(jì)算結(jié)果錯(cuò)誤的問題,比如echo intval( 0.58*100 );會(huì)打印57,而不是58,這個(gè)其實(shí)是計(jì)算機(jī)底層二進(jìn)制無法精確表示浮點(diǎn)數(shù)的一個(gè)bug,是跨語言的,我用python也遇到這個(gè)問題.所以基本上大部分語言都提供了精準(zhǔn)計(jì)算的類庫或函數(shù)庫,比如php有BC高精確度函數(shù)庫PHP實(shí)戰(zhàn)
解決方法:就是將整型變成浮點(diǎn)型 3.5 * (float)100 = 350PHP實(shí)戰(zhàn)
三:浮點(diǎn)數(shù)的怪異PHP實(shí)戰(zhàn)
坑點(diǎn):8.50 C 8 = 0.500000001? 其實(shí)原因和2差不多PHP實(shí)戰(zhàn)
解決方法:將結(jié)果進(jìn)行round(),提高精度即可PHP實(shí)戰(zhàn)
總結(jié)PHP實(shí)戰(zhàn)
以上就是PHP數(shù)據(jù)計(jì)算的注意事項(xiàng)的全部內(nèi)容,希望本文的內(nèi)容在大家在PHP中進(jìn)行數(shù)據(jù)計(jì)算的時(shí)候能有所幫助.PHP實(shí)戰(zhàn)
轉(zhuǎn)載請(qǐng)注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/4774.html