0

次のタラが与えられます:

 $number = 1050.55;
 var_dump($number - floor($number));

上記のコードが次の結果を返すのはなぜですか?

float(0.54999999999995)

この場合、0.55のような固定値が必要です。手伝ってくれませんか。

4

3 に答える 3

3

浮動小数点演算は正確ではなく、余りのエラーは一般的です。希望する精度(ドットの後の2桁など)がわかっている場合は、結果に対してround()関数を使用できます。この場合、これは次のようになります。

$number = 1050.55;
var_dump(round($number - floor($number), 2));
于 2012-05-18T23:13:34.057 に答える
2

For most floats, binary can only approximately represent the correct number. The rule is to perform floor(), ceil() or fmod() last in a series of calculations. At least only do integer math after you use them. If you cast an int to a float, as in your code, then floor() is not going to behave has you expect.

Use printf() when printing floats. Its conversion routines usually do a much better job and give you the answer you expect when truncating floats.

EDIT: Or, to be more exact, printf() works on the decimal character representation of the number when deciding where to truncate so you don't get any weird, unspecified, binary/decimal conversion artifacts.

于 2012-05-18T23:35:08.050 に答える
1

この質問を参照してください。それはJavaについてであり、PHPについて質問している間、数学は同じです。

于 2012-05-18T23:09:52.383 に答える