2012-01-04 14 views
1

可能性の重複異なる結果が得られます。
PHP unexpected result of float to int type cast
int((0.1+0.7)*10) = 7 in several languages. How to prevent this?追加フラクション番号はPHPで

は、誰かが私にこれを説明することができますが?

<?php 
echo (int) ((0.1 + 0.7)*10);//displays an output: `7` 
?> 

私は8を見て期待していたが、私は7を得た - この動作を説明してください。

これはPHPの特殊機能ですか?または、私はPHPの整数型を理解できませんでしたか?

ありがとうございました。

+0

なぜ落札ですか?説明してもらえますか? –

+0

複数の言語で[int((0.1 + 0.7)* 10)= 7の重複が可能です。どのようにこれを防ぐには?](http://stackoverflow.com/questions/6439140/int0-10-710-7-in-several-languages-how-to-prevent-this)と多分[コンピュータが浮動小数点演算を行う方法?](http://stackoverflow.com/questions/6033184/how-computer-does-floating-point-arithmetic) –

+0

内部のプレゼンテーションが異なります。 PHPマニュアル[page](http://php.net/manual/en/language.types.float.php) –

答えて

0

php manualこの質問:

また、0.1または0.7のようなベース10において 浮動小数点数として正確に表現されている有理数は、ベースに浮動小数点数として 正確な表現を持っていません2( )は、仮数部のサイズにかかわらず、内部的に使用されます。したがって、 は、内部精度の損失が小さい なしでは内部バイナリに変換できません。これは紛らわしい結果をもたらすことができる:内部表現が 7.9999999999999991118ようなものであるので 例えば、床は、((0.1 + 0.7)* 10)は、通常、代わりに8予想 7が返され....

関連する問題