java中将两个整数除以一个双精度整数
我可以看出这对于新程序员来说是一个常见的问题,但是我没有成功地为我的代码实现任何解决方案。基本上我想除以w和v,这必须保存为一个双变量。但它会打印[0.0,0.0,…,0.0]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[]
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他解释了发生了什么。不建议做什么。。。差别很大