为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿晨1998 2019-09-03 20:20:53
我在Java中有一个非常简单的划分(它是每小时的产品数量/产量),但是每当我进行这个划分时,我都会遇到奇怪的错误:float res = quantity / standard;我已经尝试了上面的几个值的分区,但我总是得到错误,但是我在其他地方尝试并且正确的那个是这样的:世界各地:13.6 = 6800 / 500;Java的:13.0 = 6800 / 500;我已经研究过BigDecimal和BigInteger,但是我还没有找到一种方法来创建这个除法,有没有其他方法在Java中进行这种划分而没有精度错误?任何帮助将不胜感激。
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

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


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


请尝试以下方法:


float res = (float) quantity / standard;

            ^^^^^^^

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


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


float f = 6800 / 500;

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


float f = 6800f / 500;


查看完整回答
反对 回复 2019-09-03
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

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


double d = (double) 6800 / 500;

要么


double d = 6800.0 / 500;


查看完整回答
反对 回复 2019-09-03
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

就我而言,我这样做:


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

而不是“正确”:


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


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 748 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信