前端編程當(dāng)中涉及到很多數(shù)學(xué)計(jì)算,如大數(shù)加減、乘除等運(yùn)算,這些都是經(jīng)典的算法。但是如果直接使用php的基本運(yùn)算功能進(jìn)行計(jì)算,存在精度問題,如計(jì)算0.0003*1000的話,將得到一個(gè)錯(cuò)誤的結(jié)果。正是因?yàn)檫@種精度的不準(zhǔn)確性, bcmath 擴(kuò)展在 php 中就顯得尤為重要。
bcmath 擴(kuò)展提供了大數(shù)學(xué)計(jì)算功能,可以將php的基礎(chǔ)運(yùn)算功能進(jìn)行升級(jí),并保證計(jì)算結(jié)果的精準(zhǔn)性。bcmath 擴(kuò)展支持高精度,比如要計(jì)算10位以上數(shù)字之間的運(yùn)算,依舊可以得到正確的結(jié)果。
使用 bcmath 首先要開啟擴(kuò)展,可以使用命令來檢查是否開啟:
php -i | grep bcmath
如果看到類似這樣的信息:bcmath
BCMath support =>enabled
就說明已經(jīng)開啟了 bcmath 擴(kuò)展。
那 bcmath 擴(kuò)展可以做什么呢,下面來看幾個(gè)示例。
1. 加法運(yùn)算$num1 = "12.3456789123456789123456789";
$num2 = "98.7654321987654321987654321";
$result = bcadd($num1, $num2, 30);
echo $result;
這樣便可以準(zhǔn)確地得到 $num1 和 $num2 的和。
2. 減法運(yùn)算$num1 = "23.456789012345678901234567890";
$num2 = "4.567890123456789012345678901";
$result = bcsub($num1, $num2, 30);
echo $result;
這一段程序可以準(zhǔn)確地給出 $num1 和 $num2 的差。
3. 乘法運(yùn)算$num1 = "1.2345678901234567890123456789";
$num2 = "371215912.3124156451000000001";
$result = bcmul($num1, $num2, 40);
echo $result;
這一段程序可以準(zhǔn)確地計(jì)算出 $num1 和 $num2 的積。
4. 除法運(yùn)算$num1 = "111.111111";
$num2 = "5.0000000000000001";
$result = bcdiv($num1, $num2, 30);
echo $result;
這一段程序則可以準(zhǔn)確地計(jì)算出 $num1 除以 $num2 的值。
以上就是 bcmath 在php中的基礎(chǔ)使用方法。在進(jìn)行一個(gè)真實(shí)項(xiàng)目計(jì)算時(shí),為了保證計(jì)算結(jié)果的正確性,開啟 bcmath 擴(kuò)展是十分有必要的。