我正在尝试将几个大数字加在一起以构成加权分数。如果有三个数字进入分数(a,b,c),则加权分数应为:(1 / a)/((1 / a)+(1 / b)+(1 / c))
目前我只是想纠正分数的分母部分。排序的数组是 {{15 9 13},{15 18 16},{9 18 12},{13 12 16},{17 24 25}}
我试图使用一个大小数,因为double和float似乎没有捕获加权产生的非常小的分数。然而,即使使用大小数,打印输出仍为0.我做错了什么?
public static BigDecimal[][] weights(int[][]sorted, int k){
BigDecimal [][] weighted = new BigDecimal[sorted.length][k]; //k=3
BigDecimal denom = BigDecimal.ZERO;
for (int i = 0; i<sorted.length; i++){ //sums to create denominator value
for(int j = 0; j<sorted[i].length; j++){
denom = denom.add(new BigDecimal(1/sorted[i][j]));
System.out.println("denom " + denom);
}
}
return weighted;
}
非常感谢任何帮助!!
答案 0 :(得分:1)
即使使用BigDecimal
s,您仍然会在值进入BigDecimal
之前执行整数除法,并使用1/sorted[i][j]
。 Java中的整数除法必须产生另一个int
,因此1
除以任何正int
2或更大的积分将导致0
。
使用double
文字1.0
强制浮点运算。
1.0 / sorted[i][j]
然后您会发现BigDecimal
是不必要的,而double
denom
也能正常运作。