《PHP實例:簡單談談php浮點數精確運算》要點:
本文介紹了PHP實例:簡單談談php浮點數精確運算,希望對您有用。如果有疑問,可以聯系我們。
bc是Binary Calculator的縮寫.bc*函數的參數都是操作數加上一個可選的 [int scale],比如string bcadd(string $left_operand, string $right_operand[, int $scale]),如果scale沒有提供,就用bcscale的缺省值.這里大數直接用一個由0-9組成的string表示,計算結果返回的也是一個 string.PHP教程
bcadd ― 將兩個高精度數字相加
bccomp ― 比較兩個高精度數字,返回-1, 0, 1
bcdiv ― 將兩個高精度數字相除
bcmod ― 求高精度數字余數
bcmul ― 將兩個高精度數字相乘
bcpow ― 求高精度數字乘方
bcpowmod ― 求高精度數字乘方求模,數論里非常常用
bcscale ― 配置默認小數點位數,相當于就是Linux bc中的”scale=”
bcsqrt ― 求高精度數字平方根
bcsub ― 將兩個高精度數字相減PHP教程
首先看一段代碼:PHP教程
<?php $a = 0.1; $b = 0.7; var_dump(($a + $b) == 0.8);
打印出來的值居然為 boolean falsePHP教程
這是為啥?PHP手冊對于浮點數有以下警告信息:PHP教程
Warning
浮點數精度
顯然簡單的十進制分數如同 0.1 或 0.7 不能在不丟失一點點精度的情況下轉換為內部二進制的格式.這就會造成混亂的結果:例如,floor((0.1+0.7)*10) 通常會返回 7 而不是預期中的 8,因為該結果內部的表示其實是類似 7.9999999999....
這和一個事實有關,那就是不可能精確的用有限位數表達某些十進制分數.例如,十進制的 1/3 變成了 0.3333333. . ..
所以永遠不要相信浮點數結果精確到了最后一位,也永遠不要比較兩個浮點數是否相等.如果確實需要更高的精度,應該使用任意精度數學函數或者 gmp 函數PHP教程
那么上面的算式我們應該改寫為PHP教程
<?php $a = 0.1; $b = 0.7; var_dump(bcadd($a,$b,2) == 0.8);
這樣就能辦理浮點數的計算問題了PHP教程
歡迎參與《PHP實例:簡單談談php浮點數精確運算》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7389.html