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

Jul*_* C. 29 java floating-point division integer-division

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

float res = quantity / standard;
Run Code Online (Sandbox Code Playgroud)

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

世界各地:

13.6 = 6800 / 500;
Run Code Online (Sandbox Code Playgroud)

Java的:

13.0 = 6800 / 500;
Run Code Online (Sandbox Code Playgroud)

我已经研究过BigDecimal和BigInteger,但是我还没有找到用它们创建这个除法的方法,有没有其他方法在Java中进行这种划分而没有精度错误?

任何帮助将不胜感激.

aio*_*obe 76

你正在划分整数,这意味着你正在使用整数除法.

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

请尝试以下方法:

float res = (float) quantity / standard;
            ^^^^^^^
Run Code Online (Sandbox Code Playgroud)

上面强制将分子视为一个float反过来促进分母浮动的分子,并且执行浮点除法而不是整数除法.

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

float f = 6800 / 500;
Run Code Online (Sandbox Code Playgroud)

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

float f = 6800f / 500;
              ^
Run Code Online (Sandbox Code Playgroud)

  • @Paul:所以没有理由使用int而不是long,除非... [:-) (4认同)
  • 另一种常用方法是将分子或分母乘以1.0.顺便说一句,几乎没有理由使用float而不是double,除非你真的关心保存4个字节. (3认同)