なぜJava +=
が間違った結果になるのですか?この問題を防ぐにはどうしたらいいですか? (たとえば、IDEでwarning
と表示されていますか?)なぜjava + =結果が間違っていますか?これを防ぐにはどうしたらいいですか?
私は試しました& IntelliJですが、どちらも警告を表示していません。
サンプルコード:b
はdouble
あるのでJLSによる
{
long a = 20000000000000000L;
double b = 90.0;
a += b;
System.out.println(a); // 20000000000000088 NG
}
{
long a = 10000000000000000L;
double b = 90.0;
a += b;
System.out.println(a); // 10000000000000090 OK
}
{
long a = 20000000000000000L;
double b = 90.0;
a += (long) b;
System.out.println(a); // 20000000000000090 OK
}
その質問@Sotiriosは説明しません。 – 4castle
@ 4castle 'double'の精度は、その小数部に適用されるだけではありません。 –
@SotiriosDelimanolisそれは質問に含まれていない正確な情報です。 [回答](http://stackoverflow.com/a/2607316/5743988)でも、浮動小数点の整数演算は正確であるため、数値を整数にスケーリングすることをお勧めします。 – 4castle