我想知道为什么在使用此代码时会丢失精度:
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 模 1 应该等于 0.0456 对吗?但是它显示的值略有不同,为什么我一直在丢失精度?我的意思是代码应该正好减去 1,直到值小于 1。
但是,我找到了一种获得正确值的方法:
double x = 12.0456;
System.out.println(x);
x %= 1;
System.out.println((float)x); //outputs 0.0456 exactly
这种方式效果很好,但是你们有更好的解决方案吗?
我不在乎我应该使用哪种浮点类型,我只想找到一种干净的方法来获得正确的值!我不喜欢将值转换为双精度然后再转换为浮点数。