-4
<?php
echo (int) ((0.1 + 0.7) * 10);

なぜこの出力7が期待ではなく出力されるの8ですか?

4

3 に答える 3

2

PHPマニュアルから :

... これにより、結果が混乱する可能性があります。たとえば、内部表現は次のようになるため、floor((0.1+0.7)*10)通常7は期待されるのではなく返されます87.9999999999999991118....

bcmath精度が必要な場合は、関数を使用することを強くお勧めします。

于 2013-10-07T21:06:14.453 に答える
0

コメントで述べたように。のようなものとして保存されている0.1 + 0.7わけではありません。にキャストすると、小数点以下が切り捨てられて 7 が出力されます。 にキャストしないと、切り捨てられず、期待値が出力されます。0.80.79999999intint

echo (0.1 + 0.7);
echo ((0.1 + 0.7) * 10);
echo (int) ((0.1 + 0.7) * 10);

出力:

0.8
8
7

PHP ガイドの浮動小数点数に関する非常に大きな警告に注意してください。それはあなたが尋ねている正確な例です。

于 2013-10-07T21:05:48.780 に答える
0

int切り捨ての問題を回避するには、指定された精度で を使用しround()ます

 echo round(0.09+0.7,1)*10;
 8

round()orint()の場合に単に省略した場合とは異なり、これにより整数が得られます。

echo (0.09+0.7)*10;
7.9
于 2013-10-07T21:06:50.760 に答える