PHP bcdiv(​​)在大数字上除以零

时间:2013-03-12 08:50:28

标签: php bcmath

以下代码给出了“警告:bcdiv(​​)[function.bcdiv]:在...中除以零”

$a = 20000000000000002;
$b = 20000000000000004;
echo bcdiv($a, $b);

为什么会这样?

如果我将值放在“”中,则它不会发出警告。

5 个答案:

答案 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

查看parameterstype -

left_operand

  

左操作数,作为字符串。

right_operand

  

右操作数,作为字符串。

尺度

  

此可选参数用于设置后面的位数   结果中的小数位。您还可以设置全局默认比例   通过使用bcscale()来获取所有函数。

答案 2 :(得分:0)

根据docsbcdiv需要字符串:

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()。

为所有函数设置全局默认比例

来自http://php.net/manual/en/function.bcdiv.php