對于任意精度的數學(xué), 如果有足夠多的內存,PHP 提供的 BCMath 支持用字符串的形式表示任意大小和精度的數字,最大尺寸為
2147483647
(即 0x7FFFFFFF
)。
有效(即格式良好)的 BCMath 數字是匹配正則表達式
/^[+-]?[0-9]*(\.[0-9]*)?$/
的字符串。
BCMath 函數想要操作的是 string,如果傳入了 float 可能無(wú)法達到想要的效果, 因為 PHP 會(huì )將 float 的值轉換為 string。 也就意味著(zhù) string 可能會(huì )帶科學(xué)計數法符號(BCMath 并不支持), 另外在 PHP 8.0.0 之前,小數點(diǎn)分隔符也不支持本地化(BCMath 只能識別英文句號小數點(diǎn))。
<?php
$num1 = 0; // (string) 0 => '0'
$num2 = -0.000005; // (string) -0.000005 => '-5.05E-6'
echo bcadd($num1, $num2, 6); // => '0.000000'
setlocale(LC_NUMERIC, 'de_DE'); // 使用逗號小數點(diǎn)
$num2 = 1.2; // (string) 1.2 => '1,2'
echo bcsub($num1, $num2, 1); // => '0.0'
?>