我看到这是新程序员常见的问题,但我没有成功地将任何解决方案实现到我的代码中。基本上,我想要将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;
}
这里的代码 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在整个过程中使用双精度数学,而不是在最后将整数数学转换为双精度数学。
使用方法如下:
d = (double) w[L] /v[L];
实际上,这里的w[L]/v[L]
都是整数。在除法运算中,它失去了精度并截断为整数值。然后,被截断的整数被转换为double
。
解决方案是将操作数或除数或两者都转换为double
。然后,除法运算将产生double
。
d = w[L]/(double)v[L];
BigDecimal
。 - hfontanez