站長(zhǎng)資訊網(wǎng)
        最全最豐富的資訊網(wǎng)站

        php浮點(diǎn)相減不等于0

        php浮點(diǎn)相減不等于0

        php浮點(diǎn)相減不等于0

        php浮點(diǎn)相減不等于0是因?yàn)橛?jì)算機(jī)將10進(jìn)制數(shù)轉(zhuǎn)為2進(jìn)制數(shù)時(shí)造成了精度丟失,因此可以使用bcadd() 函數(shù)來(lái)對(duì)浮點(diǎn)數(shù)相加減并進(jìn)行精度轉(zhuǎn)換。

        另外,判斷浮點(diǎn)數(shù)是不是等于0,不是用$num == 0,而是abs($d) < EPS,這個(gè)EPS是個(gè)很小的值。

        作為浮點(diǎn)型數(shù)據(jù),其精度已經(jīng)損失了一部分,達(dá)不到完全精確。所以永遠(yuǎn)不要相信浮點(diǎn)數(shù)結(jié)果精確到了最后一位,也永遠(yuǎn)不要比較兩個(gè)浮點(diǎn)數(shù)是否相等。需要說(shuō)明的是,這不是PHP的問題,而是計(jì)算機(jī)內(nèi)部處理浮點(diǎn)數(shù)的問題!在 C、JAVA 等語(yǔ)言中也會(huì)遇到同樣的問題。

        一則浮點(diǎn)數(shù)計(jì)算例子如下:

        $a = 0.2+0.7; $b = 0.9; var_dump($a == $b);

        打印出的結(jié)果是:bool(false)。也就是說(shuō)在這里 0.2+0.7 的計(jì)算結(jié)果與 0.9 并不相等,這顯然是有違我們的常識(shí)的。

        對(duì)此問題,PHP官方手冊(cè)曾又說(shuō)明:顯然簡(jiǎn)單的十進(jìn)制分?jǐn)?shù)如 0.2 不能在不丟失一點(diǎn)點(diǎn)精度的情況下轉(zhuǎn)換為內(nèi)部二進(jìn)制的格式。這和一個(gè)事實(shí)有關(guān),那就是不可能精確的用有限位數(shù)表達(dá)某些十進(jìn)制分?jǐn)?shù)。例如,十進(jìn)制的 1/3 變成了 0.3333333…。

        所以要比較兩個(gè)浮點(diǎn)數(shù),需要將其控制在我們需要的精度范圍內(nèi)再行比較,因此使用 bcadd() 函數(shù)來(lái)對(duì)浮點(diǎn)數(shù)想加并進(jìn)行精度轉(zhuǎn)換(為字符串):

        var_dump(bcadd(0.2,0.7,1) == 0.9); // 輸出:bool(true)

        贊(0)
        分享到: 更多 (0)
        網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
        主站蜘蛛池模板: 亚洲人成亚洲精品| 狠狠精品久久久无码中文字幕| 精品国产第1页| 人妻少妇乱子伦精品| 久久青青草原精品国产软件| 久久se精品一区二区| 亚洲av永久无码精品网站| 精品午夜福利1000在线观看 | 精品国产午夜理论片不卡| 免费人妻精品一区二区三区| 91在线手机精品超级观看| 国产福利精品一区二区| 亚洲国产成人一区二区精品区| 免费看一级毛片在线观看精品视频 | 亚洲国产成人精品不卡青青草原| 欧洲精品色在线观看| 亚洲七七久久精品中文国产| 久久精品视频91| 久久精品亚洲乱码伦伦中文| 国内精品久久久久久久影视麻豆| 中文精品久久久久国产网址| 久久久久久久99精品免费观看| 91精品国产综合久久久久久| 国产乱子伦精品无码码专区| 久久国产欧美日韩精品| 久久精品水蜜桃av综合天堂| 色欲国产麻豆一精品一AV一免费| 最新国产精品拍自在线播放| 亚洲精品成人a在线观看| 午夜精品久久影院蜜桃| 日韩一区二区精品观看| 西瓜精品国产自在现线| 亚洲国产精品一区二区三区久久| 欧美精品播放| 日韩精品一区二三区中文| 无码人妻一区二区三区精品视频| 午夜在线视频91精品 | 国产99视频精品一区| 国产成人精品视频一区二区不卡| 国产精品无码专区| 992tv精品视频tv在线观看|