0

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

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 ])

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

4

1 回答 1

1

使用的数字bcmath应该表示为字符串,因为如果您使用原生 php 数字格式(如整数或浮点数),那么您根本无法表达所有值。

最简单的示例 ist 类型整数。整数被限制为由常量定义的最大值PHP_INT_MAX。如果您尝试写下任何大于该 php 的数字将无法表示该确切数字。这是因为 php 使用预定义的内存量来存储整数。

看这个例子:

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

输出是:

9223372036854775807
9.2233720368548E+18

如您所见,第二个值不是9223372036854775808 正确的,而是其他一些(类似)值。

于 2016-03-11T11:26:00.540 回答