BigDecimal解決商業計算精度丟失問題
阿新 • • 發佈:2018-12-22
@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