我们都知道处理浮点数可能会遇到这样的麻烦:
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 ])
但为什么会这样呢?我注意到前两个参数应该是字符串,我想知道这是因为这些函数是否以字符串方式处理数字?
答案 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这是正确的,但其他一些(类似的)值。