java中将两个整数除以一个双精度整数

java中将两个整数除以一个双精度整数,java,int,double,divide,Java,Int,Double,Divide,我可以看出这对于新程序员来说是一个常见的问题,但是我没有成功地为我的代码实现任何解决方案。基本上我想除以w和v,这必须保存为一个双变量。但它会打印[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; } 公共静态双密度(int[]

我可以看出这对于新程序员来说是一个常见的问题,但是我没有成功地为我的代码实现任何解决方案。基本上我想除以w和v,这必须保存为一个双变量。但它会打印[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;
}
公共静态双密度(int[]w,int[]v){
双d=0;
对于(L=0;L
实际上
w[L]/v[L]
这两者都是整数,在除法运算中它失去了精度,并被转换为
整数
值,后者被转换为
双精度

解决方案是将操作数或除数或两者转换为双精度,除法运算将产生十进制值

d = w[L]/(double)v[L];
像下面这样使用

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

这里的这一行
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在整个过程中都使用双精度数学,而不是使用整数数学,然后在最后转换为双精度

Google:integer division。它将给您一个带截断的整数结果。写入d=(双)w[L]/v[L];可能是@SilviuBurcea的重复我更想表示它是一个int@Silviu他解释了发生了什么。不建议做什么。。。差别很大