为什么bcmath功能不会失去原因?

时间:2016-03-11 11:11:50

标签: php bcmath

我们都知道处理浮点数可能会遇到这样的麻烦:

echo intval(0.58*100);//57

使用bcmath函数会有所帮助:

echo bcmul('0.58', '100', 2);//58.00

php手册:

//Multiply the left_operand by the right_operand.
string bcmul(string $left_operand , string $right_operand [, int $scale = 0 ])

但为什么会这样呢?我注意到前两个参数应该是字符串,我想知道这是因为这些函数是否以字符串方式处理数字?

1 个答案:

答案 0 :(得分:1)

bcmath使用的数字应该表示为字符串,因为如果使用整数或浮点数等本机php数字格式,则无法表达所有值。

最简单的例子是整数。整数限制为常量PHP_INT_MAX定义的最大值。如果你试图写下任何大于那个数字的数字,那么php将无法代表那个确切的数字。这是因为php使用预定义的内存量来存储整数。

见这个例子:

echo PHP_INT_MAX;
echo "\n";
echo PHP_INT_MAX + 1;

输出是:

9223372036854775807
9.2233720368548E+18

正如您所看到的,第二个值是不是 9223372036854775808这是正确的,但其他一些(类似的)值。