3
エコー 65.7 * 100 % 10 // 0

エコー 65.6 * 100 % 10 // 9 <---

エコー 6560 % 10 // 0

エコー 65.5 * 100 % 10 // 0

誰かが理由を説明してもらえますか?

編集:

人間または非プログラマーにとって、結果 9 は明らかに間違っています。

"error"プログラミング時にこれを防ぐにはどうすればよいですか?

4

4 に答える 4

4

65.6浮動小数点では、実際には の近似値であるためです65.6。それは実際には よりもわずかに小さく65.6、すなわち65.5999類似しています。

実際の値に対する私の推測が正しいと仮定すると、モジュラス演算子6559.9によって取り除かれ6599、10 で割って余りが 9 になります。

于 2012-11-12T07:30:23.723 に答える
3

65.6 * 100 は 6559.9999999999 なので。

それはあなたにとって浮動小数点です。

于 2012-11-12T07:30:45.543 に答える
2

すでに述べたように、これは浮動小数点演算に関係しています。What Every Computer Scientist Should Know About Floating-Point Arithmeticを読むことをお勧めします。

于 2012-11-12T07:41:36.040 に答える
1

なぜなら:

<?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ではありません。大きな赤い警告ボックスがその理由を説明しています。

于 2012-11-12T07:39:32.927 に答える