次のコードは、「警告:bcdiv()[function.bcdiv]:ゼロ除算...」を示します。
$a = 20000000000000002;
$b = 20000000000000004;
echo bcdiv($a, $b);
なぜこれが起こるのですか?
値を「」に入れても、警告は表示されません。
数値を整数として書きましたが、PHP では数値が高すぎて、可能な最大整数値に切り捨てられます。BCMath は文字列を処理します。これほど大きな数値を扱う場合は、必ずそれらを引用符で囲んで、実際に文字列であることを確認してください。
""
bcdivは入力を文字列として必要とするため、これらをラップするのは正しいことです。
string bcdiv ( string $left_operand , string $right_operand [, int $scale ] )
left_operand
文字列としての左側のオペランド。
right_operand
文字列としての右のオペランド。
規模
このオプションのパラメーターは、結果の小数点以下の桁数を設定するために使用されます。bcscale()を使用して、すべての関数のグローバルデフォルトスケールを設定することもできます。
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() を使用して、すべての関数のグローバルなデフォルト スケールを設定することもできます。
docsによると、bcdiv
文字列を取ります:
string bcdiv ( string $left_operand , string $right_operand [, int $scale ] )
どうやら、あなたが提供している整数値は、標準の PHP ints がその値を保持するには大きすぎます。bcmath
文字列で動作します(実際にはそれほど奇妙ではありません):
任意精度の数学のために、PHP は Binary Calculator を提供します。これは、文字列として表される任意のサイズと精度の数値をサポートします。
( bcmathイントロより)
BCMath 関数はすべて文字列を引数として受け入れるため、文字列を引用符で囲む必要があります。
BCMath のドキュメントは、http ://www.php.net/manual/en/book.bc.php にあります。