在Java中将两个整数相除得到一个浮点数

21

我看到这是新程序员常见的问题,但我没有成功地将任何解决方案实现到我的代码中。基本上,我想要将w和v除以一个double变量。但它会输出[0.0, 0.0, ..., 0.0]。

public static double density(int[] w, int[] v){
double d = 0;
    for(L = 0; L < w.length; L++){
        d = w[L]  /v[L];
    }
    return d;
}

2
谷歌:整数除法。它将给出一个截断的整数结果。写成 d = (double)w[L] / v[L]; - Bathsheba
可能是为什么1/3的结果是0?的重复问题。 - fabian
如果需要精度,请勿使用基本类型的double或其包装类。请改用BigDecimal - hfontanez
3个回答

38

这里的代码 d = w[L] /v[L]; 需要分几步完成。

d = (int)w[L]  / (int)v[L]
d=(int)(w[L]/v[L])            //the integer result is calculated
d=(double)(int)(w[L]/v[L])    //the integer result is cast to double

换句话说,在将数值转换为双精度浮点数之前,其精度已经丧失,因此您需要先将其转换为双精度浮点数,因此

d = ((double)w[L])  / (int)v[L];

这将迫使Java在整个过程中使用双精度数学,而不是在最后将整数数学转换为双精度数学。


1
@SilviuBurcea 我更想表达的是它确实是一个整数。 - Richard Tingle
@Silviu 他解释了发生了什么。并没有建议要做什么... 这是很大的区别。 - ppeterka

5

使用方法如下:

    d = (double) w[L]  /v[L];

3

实际上,这里的w[L]/v[L]都是整数。在除法运算中,它失去了精度并截断为整数值。然后,被截断的整数被转换为double

解决方案是将操作数或除数或两者都转换为double。然后,除法运算将产生double

d = w[L]/(double)v[L];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接