从 Java 中的多头除法中获取分数

Get fraction from division of longs in Java

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

我不太了解浮点精度的工作原理。

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

float 的精度为 6 到 9 位小数。

在第一次计算中,浮点除法最后发生,所以完整的浮点精度在那里。

第二次计算时出现了浮点除法,然后整数部分被lob掉了,暴露了后面数字的不准确。
整数部分是精度的一部分,现在那些数字丢失了。

为了看得更清楚,请尝试将 dividend 设置为更大的数字,但准确度会更低。

感谢@Andreas 在评论中的回答。