エコー 65.7 * 100 % 10 // 0 エコー 65.6 * 100 % 10 // 9 <--- エコー 6560 % 10 // 0 エコー 65.5 * 100 % 10 // 0
誰かが理由を説明してもらえますか?
編集:
人間または非プログラマーにとって、結果 9 は明らかに間違っています。
"error"
プログラミング時にこれを防ぐにはどうすればよいですか?
65.6
浮動小数点では、実際には の近似値であるためです65.6
。それは実際には よりもわずかに小さく65.6
、すなわち65.5999
類似しています。
実際の値に対する私の推測が正しいと仮定すると、モジュラス演算子6559.9
によって取り除かれ6599
、10 で割って余りが 9 になります。
65.6 * 100 は 6559.9999999999 なので。
それはあなたにとって浮動小数点です。
すでに述べたように、これは浮動小数点演算に関係しています。What Every Computer Scientist Should Know About Floating-Point Arithmeticを読むことをお勧めします。
なぜなら:
<?php
echo (65.7 * 100 == 6570) ? "Equal" : "Not equal"; // Equal
echo (65.6 * 100 == 6560) ? "Equal" : "Not equal"; // NOT EQUAL !!
echo (65.5 * 100 == 6550) ? "Equal" : "Not equal"; // Equal
?>
65.6 * 100 は6560ではありません。大きな赤い警告ボックスがその理由を説明しています。