站長(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的問(wèn)題,而是計(jì)算機(jī)內(nèi)部處理浮點(diǎn)數(shù)的問(wèn)題!在 C、JAVA 等語(yǔ)言中也會(huì)遇到同樣的問(wèn)題。

        一則浮點(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ì)此問(wèn)題,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)
        主站蜘蛛池模板: 999在线视频精品免费播放观看| 3D动漫精品一区二区三区| 精品国产第一国产综合精品 | 国产日韩精品欧美一区| 国产精品夜色视频一级区| 91精品啪在线观看国产| 午夜精品乱人伦小说区| 久久久久国产成人精品亚洲午夜| 亚洲精品电影网| 99久久精品国内| 国产精品偷伦视频观看免费 | 成人精品一区二区三区免费看| 999在线视频精品免费播放观看| 欧洲精品99毛片免费高清观看 | 免费精品国产自产拍在线观看| 丁香色婷婷国产精品视频| 国产成人久久精品区一区二区| 久久精品国产亚洲AV无码娇色 | 潮喷大喷水系列无码久久精品| 小辣椒福利视频精品导航| 香蕉依依精品视频在线播放 | 久99精品视频在线观看婷亚洲片国产一区一级在线| 国产精品美女网站在线观看| 久久国产精品久久久| 国产精品成人观看视频免费 | 国产午夜精品一区二区三区漫画| 亚洲Av无码精品色午夜| 亚洲国产精品无码久久98| 亚洲精品无码激情AV| 亚洲精品无码久久久久AV麻豆| 亚洲?V无码乱码国产精品| 香蕉依依精品视频在线播放| 亚洲精品麻豆av| 婷婷精品国产亚洲AV麻豆不片 | 亚洲欧洲国产精品香蕉网| 亚洲人精品午夜射精日韩| 中文国产成人精品久久不卡| 一区二区国产精品 | 欧洲精品视频在线观看| 欧美精品亚洲精品日韩| 四虎影视国产精品亚洲精品hd|