このコードを使用すると、なぜ精度が失われるのか疑問に思っています:
double x = 12.0456; // or float : same result
System.out.println(x); // outputs 12.0456 obviously
x %= 1; // should now be equal to 0.0456 right?
System.out.println(x); // outputs 0.04560000000000031 or 0.045599937 when using float
12.0456 modulo 1 は 0.0456 に等しいはずですよね? しかし、わずかに異なる値を示しています。なぜ精度が下がり続けるのでしょうか? つまり、値が 1 未満になるまで、コードは正確に 1 を減算する必要があります。
ただし、正しい値を取得する方法を見つけました。
double x = 12.0456;
System.out.println(x);
x %= 1;
System.out.println((float)x); //outputs 0.0456 exactly
この方法は完璧に機能しますが、もっと良い解決策はありますか?
どの浮動小数点型を使用する必要があるかは気にしません。正しい値を取得するためのクリーンな方法を見つけたいだけです。値を double に変換してから float に変換する必要はありません。