0

浮動小数点数を扱うと、次のような問題が発生する可能性があることは誰もが知っています。

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 ])

しかし、なぜこれがうまくいくのでしょうか?
最初の 2 つのパラメーターは文字列でなければならないことに気付きました。これは、これらの関数が数値を文字列で処理するためでしょうか?

4

1 に答える 1

1

で使用される数値bcmathは文字列として表す必要があります。これは、整数や浮動小数点数などのネイティブ PHP 数値形式を使用すると、すべての値を表現できないためです。

最も単純な例は、整数型です。整数は、定数によって定義される最大値に制限されPHP_INT_MAXます。それより大きい数値を書き留めようとすると、php はその正確な数値を表すことができなくなります。これは、php が事前に定義された量のメモリを使用して整数を格納するためです。

次の例を参照してください。

echo PHP_INT_MAX;
echo "\n";
echo PHP_INT_MAX + 1;

出力は次のとおりです。

9223372036854775807
9.2233720368548E+18

ご覧のとおり、2 番目の値は正しい 9223372036854775808 ではなく、他の (類似の) 値です

于 2016-03-11T11:26:00.540 に答える