为什么整数除法给出错误的答案?

我在Java中有一个非常简单的划分(这是一个产品数量/每小时产量),但是每当我进行这个划分时,我都会得到奇怪的错误:

float res = quantity / standard;

我已经尝试了上面的几个值的除法,我总是得到错误,但是我在其他地方尝试过并得到正确的是这样的:

世界各地:

13.6 = 6800 / 500;

爪哇岛:

13.0 = 6800 / 500;

我已经研究了BigDecimal和BigInteger,但是我还没有找到一种方法来创建这种划分,有没有其他方法可以在Java中进行这种划分而不会出现精度错误?

任何帮助将不胜感激。


答案 1

您正在除以整数,这意味着您正在使用整数除法

在整数除法中,结果的小数部分被丢弃。

请尝试以下操作:

float res = (float) quantity / standard;
            ^^^^^^^

上述方法强制将分子视为 a,这反过来又使分母也浮动,并且执行浮动除法而不是整数除法。float

请注意,如果您正在处理文本,则可以更改

float f = 6800 / 500;

包含后缀以使分母成为浮点数:f

float f = 6800f / 500;
              ^

答案 2

如果您担心精度,我建议使用精度位数的两倍以上。但是,浮点仅准确地表示总和或 0.5 的幂的分数。这意味着 0.6 仅近似表示。这不一定是适当舍入的问题。double

double d = (double) 6800 / 500;

double d = 6800.0 / 500;