以下代码给出了“警告:bcdiv()[function.bcdiv]:在...中除以零”
$a = 20000000000000002;
$b = 20000000000000004;
echo bcdiv($a, $b);
为什么会这样?
如果我将值放在“”中,则它不会发出警告。
答案 0 :(得分:1)
您将数字写成整数,而在PHP中,这些数字太高而且被截断为最大可能的整数值。 BCMath使用字符串。如果使用高数字,请务必将它们放在引号中,以确保它们确实是字符串。
答案 1 :(得分:0)
string bcdiv ( string $left_operand , string $right_operand [, int $scale ] )
参考 - http://www.php.net/manual/en/function.bcdiv.php
查看parameters
和type
-
left_operand
左操作数,作为字符串。
right_operand
右操作数,作为字符串。
尺度
此可选参数用于设置后面的位数 结果中的小数位。您还可以设置全局默认比例 通过使用bcscale()来获取所有函数。
答案 2 :(得分:0)
根据docs,bcdiv
需要字符串:
string bcdiv ( string $left_operand , string $right_operand [, int $scale ] )
显然,您提供的整数值对于标准PHP整数来说太大而无法容纳该值。 bcmath
适用于字符串(实际上并不那么奇怪):
对于任意精度数学,PHP提供了二进制计算器,它支持任何大小和精度的数字,表示为字符串。
(来自the bcmath intro)
答案 3 :(得分:0)
BCMath函数都接受字符串作为参数,因此将它们放在引号中就是你想要做的。
BCMath文档可在以下网址找到:http://www.php.net/manual/en/book.bc.php
答案 4 :(得分:0)
将它们包装在""
中是正确的,因为bcdiv希望输入为字符串
string bcdiv ( string $left_operand , string $right_operand [, int $scale ] )
left_operand
左操作数,作为字符串。
right_operand
右操作数,作为字符串。
尺度
此可选参数用于设置结果中小数位后面的位数。您还可以使用bcscale()。
为所有函数设置全局默认比例