1

次のコードは、「警告:bcdiv(​​)[function.bcdiv]:ゼロ除算...」を示します。

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

なぜこれが起こるのですか?

値を「」に入れても、警告は表示されません。

4

5 に答える 5

1

数値を整数として書きましたが、PHP では数値が高すぎて、可能な最大整数値に切り捨てられます。BCMath は文字列を処理します。これほど大きな数値を扱う場合は、必ずそれらを引用符で囲んで、実際に文字列であることを確認してください。

于 2013-03-12T08:55:51.533 に答える
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から

于 2013-03-12T09:15:42.180 に答える
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() を使用して、すべての関数のグローバルなデフォルト スケールを設定することもできます。

于 2013-03-12T08:55:23.570 に答える
0

docsによると、bcdiv文字列を取ります:

string bcdiv ( string $left_operand , string $right_operand [, int $scale ] )

どうやら、あなたが提供している整数値は、標準の PHP ints がその値を保持するには大きすぎます。bcmath文字列で動作します(実際にはそれほど奇妙ではありません):

任意精度の数学のために、PHP は Binary Calculator を提供します。これは、文字列として表される任意のサイズと精度の数値をサポートします。

( bcmathイントロより)

于 2013-03-12T08:55:35.083 に答える
0

BCMath 関数はすべて文字列を引数として受け入れるため、文字列を引用符で囲む必要があります。

BCMath のドキュメントは、http ://www.php.net/manual/en/book.bc.php にあります。

于 2013-03-12T08:55:37.233 に答える