你或許已經(jīng)聽說過PHP的bcmath擴(kuò)展,它是一個用于高精度計(jì)算的數(shù)學(xué)庫。bcmath提供了一組函數(shù)可以支持更高精度的數(shù)字運(yùn)算,允許你在PHP里計(jì)算比浮點(diǎn)數(shù)更大的數(shù)值,而不會丟失更多精度。
bcmath里面最重要的是任意精度計(jì)算(bcadd, bcsub, bcmul, bcdiv),對研究計(jì)算機(jī)科學(xué)的人來說將是一個很有價(jià)值的學(xué)習(xí)和使用,它可以計(jì)算非常大甚至沒有任何限制的數(shù)字。
以計(jì)算階乘為例,傳統(tǒng)的實(shí)現(xiàn)方式是使用循環(huán)或遞歸。當(dāng)數(shù)字比較小的時(shí)候這是沒有問題的,但是一旦計(jì)算的數(shù)字開始增大,系統(tǒng)就會處理不了。現(xiàn)在我們用bcmath來計(jì)算一個數(shù)字的階乘,那么代碼如下:
$fact = "1"; $number = "1000"; for ( $i = 2; $i<= $number; $i++ ) { $fact = bcmul($fact, $i); } echo $fact;bcadd- 函數(shù)用來將兩個數(shù)相加
$a = '1'; $b = '2'; $res = bcadd($a,$b); echo 'The result is:'.$res;bcsub- 函數(shù)用來將兩個數(shù)相減
$a = '2'; $b = '1'; $res = bcsub($a,$b); echo 'The result is:'.$res;bcmul- 函數(shù)用來將兩個數(shù)相乘
$a = '3'; $b = '4'; $res = bcmul($a,$b); echo 'The result is:'.$res;bcdiv- 函數(shù)用來將兩個數(shù)相除
$a = '1'; $b = '2'; $res = bcdiv($a,$b,2); echo 'The result is:'.$res;以上就是bcadd、bcsub、bcmul和bcdiv四個主要的函數(shù),舉例中我們將使用的所有數(shù)字都是字符串形式的,這意味著我們將在計(jì)算之前將所有的值轉(zhuǎn)換為字符串,這樣可以確保我們不會失去任何精度。 對于PHP bcmath擴(kuò)展,一定要注意的是,因?yàn)樗鼘纫蟾撸允褂脮r(shí)需要格外小心。不要亂用精度函數(shù)包括框架中的精度函數(shù),避免在不了解精度計(jì)算的情況下肆意使用。