Java中的BigDecimal缩放问题

时间:2018-01-09 10:40:31

标签: java bigdecimal

目前我的比例值为0.588235294,我需要乘以它,总值的总和必须为100.使用Excel计算是完美的但是当我在BigDecmial api的帮助下尝试时有一点变化。

以下屏幕截图是 Excel 的输出。

enter image description here

在Java中

public class CalculateRates {

    public static void main(String[] args) {

        BigDecimal f1 = new BigDecimal(65);
        BigDecimal f2 = new BigDecimal(45);
        BigDecimal f3 = new BigDecimal(35);
        BigDecimal f4 = new BigDecimal(25);

        BigDecimal totalRate = f1.add(f2).add(f3).add(f4);

        System.out.println("Total Value : " + totalRate);

        BigDecimal proportionatedValue = new BigDecimal(100.00).divide(totalRate, 9, BigDecimal.ROUND_DOWN);

        System.out.println("ProportionatedValue : "+proportionatedValue);

        BigDecimal f11 = f1.multiply(proportionatedValue).setScale(8);
        BigDecimal f12 = f2.multiply(proportionatedValue).setScale(8);
        BigDecimal f13 = f3.multiply(proportionatedValue).setScale(8);
        BigDecimal f14 = f4.multiply(proportionatedValue).setScale(8);


        System.out.println(f11 + ":: " + f12 + ":: " + f13 + ":: " + f14 );

        System.out.println("Total : "+f11.add(f12).add(f13).add(f14));

    }

}

第一个和第二个值的输出在最后一个数字上相差一个

enter image description here

enter image description here

造成这个问题的原因是什么?以及我们如何处理它以获得共同的解决方案。

1 个答案:

答案 0 :(得分:0)

您正在使用BigDecimal.ROUND_DOWN,如果您确实想要使用与Excel工作表中完全相同的值,则应使用ROUND_UP