java中的BigDecimal加法
我试着把几个大数字加起来,得到一个加权分数。如果分数(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。我做错了什么java中的BigDecimal加法,java,bigdecimal,Java,Bigdecimal,我试着把几个大数字加起来,得到一个加权分数。如果分数(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[][
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;
}
公共静态BigDecimal[][]权重(int[][]排序,int k){
BigDecimal[][]加权=新的BigDecimal[sorted.length][k];//k=3
BigDecimal denom=BigDecimal.0;
对于(int i=0;i即使使用BigDecimal
s,在值进入BigDecimal
之前仍在执行整数除法,使用1/排序[i][j]
。Java中的整数除法必须产生另一个int
,因此1
除以任何正int
2或更大的数将产生0
使用double
literal1.0
强制浮点运算
1.0 / sorted[i][j]
然后你会发现BigDecimal
是不必要的,而double
denom
会很好地工作。如果你想要一个精确的数字,继续使用BigDecimal
@JonathanDrapeau通常,BigDecimal
s更精确,但是这里传递的是-double
@user3369920这是有效的吗因为你别忘了接受它