从Java

时间:2017-03-19 06:59:23

标签: java floating-point modulo

我想得到两个长值的商的分数(模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

我对浮点精度的工作原理并不十分了解。

为什么第二个(可能更清晰)的实现不如第一个(

)准确

1 个答案:

答案 0 :(得分:0)

float的精度为6到9位十进制数。

在第一次计算中,浮点除法最后发生,因此完全浮点精度就在那里。

在第二个计算中,浮点除法发生,然后整数部分被抛出,暴露出后面数字的不准确性。
整数部分是精度的一部分,现在这些数字都会丢失。

要更好地了解相关信息,请尝试将dividend设置为更大的数字,然后更准确。

感谢@Andreas在评论中给出的答案。