我想得到两个长值的商的分数(模1)。
long dividend = 50L;
long divisor = 3L;
float n1 = (dividend % divisor) / (float) divisor;
float n2 = (dividend / (float) divisor) % 1;
System.out.println(n1);
System.out.println(n2);
上面列出了以下内容。
0.6666667
0.66666603
我对浮点精度的工作原理并不十分了解。
为什么第二个(可能更清晰)的实现不如第一个(
)准确答案 0 :(得分:0)
float
的精度为6到9位十进制数。
在第一次计算中,浮点除法最后发生,因此完全浮点精度就在那里。
在第二个计算中,浮点除法发生,然后整数部分被抛出,暴露出后面数字的不准确性。
整数部分是精度的一部分,现在这些数字都会丢失。
要更好地了解相关信息,请尝试将dividend
设置为更大的数字,然后更准确。
感谢@Andreas在评论中给出的答案。