BigDecimal在java中添加

时间:2014-09-08 19:34:05

标签: 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[][] 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;
}

非常感谢任何帮助!!

1 个答案:

答案 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也能正常运作。