簡體   English   中英

Java中的BigDecimal縮放問題

[英]BigDecimal scaling issue in Java

目前,我的比例值為0.588235294,需要乘以它,並且總值之和必須為100。使用Excel時,計算效果理想,但是在使用BigDecmial api進行嘗試時,計算結果仍然相同。

下面的屏幕截圖是Excel的輸出。

在此處輸入圖片說明

在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));

    }

}

第一個和第二個值的輸出最后相差一個數字

在此處輸入圖片說明

在此處輸入圖片說明

是什么導致此問題? 以及我們如何才能找到一個通用解決方案。

您正在使用BigDecimal.ROUND_DOWN ,如果您確實希望具有與Excel工作表中完全相同的值,則應使用ROUND_UP

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM