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

我在Java中有一个非常简单的部门(这是一个产品数量/每小时生产),但是无论何时我做这个部门,我都会遇到奇怪的错误:

float res = quantity / standard; 

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

世界上任何地方:

 13.6 = 6800 / 500; 

Java的:

 13.0 = 6800 / 500; 

我已经研究了BigDecimal和BigInteger,但是我还没有find一种方法来与他们创build这个部门,还有没有其他的方式来做这个部门在Java中没有精度错误?

任何帮助将不胜感激。

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

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

尝试以下操作:

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

上面的分子被看作是一个float的分子,这又促使分母浮动,并且执行浮动分割而不是整数分割。

请注意,如果你正在处理文字,你可以改变

 float f = 6800 / 500; 

包含f后缀以使分母浮动:

 float f = 6800f / 500; ^ 

如果你关心精度,我会build议使用double精度数字的两倍以上。 然而,浮点数只能精确地表示0.5的和或0.5的幂的分数。 这意味着0.6只是近似表示。 这并不是一个适当的四舍五入问题。

 double d = (double) 6800 / 500; 

要么

 double d = 6800.0 / 500; 

嗨尝试这一个它可能有助于满足您的要求

 double percent=(7819140000l-3805200000l)*100f/7819140000l; public String format_Decimal(double decimalNumber) { NumberFormat nf = NumberFormat.getInstance(); nf.setMaximumFractionDigits(5); nf.setMinimumFractionDigits(2); nf.setRoundingMode(RoundingMode.HALF_UP); String x = nf.format(decimalNumber); return x; } 

在我的情况下,我是这样做的:

 double a = (double) (MAX_BANDWIDTH_SHARED_MB/(qCount+1)); 

而不是“正确的”:

 double a = (double)MAX_BANDWIDTH_SHARED_MB/(qCount+1);