使用計算類BigDecimal寫一個精確計算工具類
阿新 • • 發佈:2018-11-11
在日常開放當中需要我們計算數字,利率。通常Java的做法是使用Math相關的API。但是,這樣做是不夠精確的,由於float和double不能進行計算,如果強行進行計算會使得計算不準確。造成難以挽回的損失。為了彌補這一個缺點Java提供了BigDecimal這個類來解決。在使用這個類的時候需要將double轉成String進行計算。為了方便,下面我寫了幾個常用的計算方法,當然也可以自己增加。
import java.math.BigDecimal; //精確計算工具類 public class CalculateUtils { //加法 public static double add(double var1,double var2){ BigDecimal b1=new BigDecimal(Double.toString(var1)); BigDecimal b2=new BigDecimal(Double.toString(var2)); return b1.add(b2).doubleValue(); } //減法 public static double sub(double var1,double var2){ BigDecimal b1=new BigDecimal(Double.toString(var1)); BigDecimal b2=new BigDecimal(Double.toString(var2)); return b1.subtract(b2).doubleValue(); } //乘法 public static double mul(double var1,double var2){ BigDecimal b1=new BigDecimal(Double.toString(var1)); BigDecimal b2=new BigDecimal(Double.toString(var2)); return b1.multiply(b2).doubleValue(); } //除法,scale為精確到小數後的位數 public static double div(double var1,double var2,int scale){ if(scale<0){ throw new IllegalArgumentException("The scale must be a positive integer or zero! "); } BigDecimal b1=new BigDecimal(Double.toString(var1)); BigDecimal b2=new BigDecimal(Double.toString(var2)); return b1.divide(b2,scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } //四捨五入,scale為精確到小數後的位數 public static double round(double v,int scale){ if(scale<0){ throw new IllegalArgumentException("The scale must be a positive integer or zero! "); } BigDecimal b=new BigDecimal(Double.toString(v)); BigDecimal one = new BigDecimal("1"); return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); } }