PHP下的浮點運算不準(zhǔn)的解決方法
最近在做一個?的相加減問題是,出現(xiàn)了浮點運算不準(zhǔn)的情況,看來都說解釋型語言對于浮點運算都會有問題的說法是真的。
首先看一段代碼:
<?php $a = 0.1; $b = 0.7; var_dump(($a + $b) == 0.8);
打印出來的值居然為 boolean false
這是為啥?PHP手冊對于浮點數(shù)有以下警告信息:
Warning
浮點數(shù)精度
顯然簡單的十進(jìn)制分?jǐn)?shù)如同 0.1 或 0.7 不能在不丟失一點點精度的情況下轉(zhuǎn)換為內(nèi)部二進(jìn)制的格式。這就會造成混亂的結(jié)果:例如,floor((0.1+0.7)*10) 通常會返回 7 而不是預(yù)期中的 8,因為該結(jié)果內(nèi)部的表示其實是類似 7.9999999999...。
這和一個事實有關(guān),那就是不可能精確的用有限位數(shù)表達(dá)某些十進(jìn)制分?jǐn)?shù)。例如,十進(jìn)制的 1/3 變成了 0.3333333. . .。
所以永遠(yuǎn)不要相信浮點數(shù)結(jié)果精確到了最后一位,也永遠(yuǎn)不要比較兩個浮點數(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);這樣就能解決浮點數(shù)的計算問題了
以上就是小編為大家?guī)淼腜HP下的浮點運算不準(zhǔn)的解決方法全部內(nèi)容了,希望大家多多支持腳本之家~
相關(guān)文章
php讀取EXCEL文件 php excelreader讀取excel文件
php開發(fā)中肯定會遇到將excel文件內(nèi)容導(dǎo)入到數(shù)據(jù)庫的需要,php-excel-reader可以很輕松的使用它讀取excel文件,本文將詳細(xì)介紹,需要了解的朋友可以參考下2012-12-12
Thinkphp5框架簡單實現(xiàn)鉤子(Hook)行為的方法示例
這篇文章主要介紹了Thinkphp5框架簡單實現(xiàn)鉤子(Hook)行為的方法,結(jié)合實例形式詳細(xì)分析了Thinkphp5框架實現(xiàn)鉤子(Hook)行為的步驟與相關(guān)操作技巧,需要的朋友可以參考下2019-09-09
iis 7下安裝laravel 5.4環(huán)境的方法教程
最近想嘗試體驗下laravel框架,所以自己嘗試在iis 7下安裝laravel 5.4環(huán)境,雖然遇到些問題,但最終都解決了,所以下面這篇文章主要給大家介紹了在iis 7下安裝laravel 5.4環(huán)境的方法教程,需要的朋友可以參考下。2017-06-06

