java中的BigDecimal加法

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[][

我试着把几个大数字加起来,得到一个加权分数。如果分数(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;
}
公共静态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
literal
1.0
强制浮点运算

1.0 / sorted[i][j]

然后你会发现
BigDecimal
是不必要的,而
double
denom
会很好地工作。

如果你想要一个精确的数字,继续使用
BigDecimal
@JonathanDrapeau通常,
BigDecimal
s更精确,但是这里传递的是-
double
@user3369920这是有效的吗因为你别忘了接受它