1. 程式人生 > >BigDecimal解決商業計算精度丟失問題

BigDecimal解決商業計算精度丟失問題

@Test
    public void test1(){
        System.out.println(0.05+0.01);
        System.out.println(1.0-0.42);
        System.out.println(4.015*100);
        System.out.println(123.3/100);
    }

輸出結果:
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999

    @Test
    public void test2(){
        BigDecimal b1=new BigDecimal(0.05);
        BigDecimal b2=new BigDecimal(0.01);
        System.out.println(b1.add(b2));
    }

輸出結果:
0.06000000000000000298372437868010820238851010799407958984375

    @Test
    public void test3(){
        BigDecimal b1=new BigDecimal("0.05");
        BigDecimal b2=new BigDecimal("0.01");
        System.out.println(b1.add(b2));
    }

輸出結果:
0.06

結論:使用BigDecimal的

public BigDecimal(String val) {
        this(val.toCharArray(), 0, val.length());
    }

這個構造器 解決精度問題,傳遞的引數是String型別

簡單封裝:https://github.com/shaoxiaowen/Utils/blob/master/BigDecimalUtil.java