1、構造一個BigDecimal對象:
//創建一個BigDecimal對象,初始化必須使用字符串,因為用數值初始化會得到近似值,不准確 BigDecimal bigDecimalOne = new BigDecimal("1.232324"); //將浮點數裝換成BigDecimal對象 double d = 1.3422424; BigDecimal bigDecimalTwo =BigDecimal.valueOf(d);
2、BigDecimal成員方法:
//bigDecimalOne加上bigDecimalTwo,然后返回一個新對象 bigDecimalOne.add(bigDecimalTwo); //bigDecimalOne減去bigDecimalTwo,然后返回一個新對象 bigDecimalOne.subtract(bigDecimalTwo); //bigDecimalOne乘以bigDecimalTwo,然后返回一個新對象 bigDecimalOne.multiply(bigDecimalTwo); //bigDecimalOne除以bigDecimalTwo,然后返回一個新對象 bigDecimalOne.divide(bigDecimalTwo);
3、BigDecimal對象轉化成基本數據類型:
//BigDecimal對象的數值轉換成對應的字符串 bigDecimalOne.toString(); //BigDecimal對返回double值 bigDecimalOne.doubleValue(); //BigDecimal對返回float bigDecimalOne.floatValue(); //BigDecimal對返回long值 bigDecimalOne.longValue(); //BigDecimal對返回int值 bigDecimalOne.intValue();
4、BigDecimal比較大小:
BigDecimal value1 = new BigDecimal("0.8"); BigDecimal value2 = new BigDecimal("2"); if (value1.compareTo(value2) == 1) { System.out.println("value1大於value2"); } if (value1.compareTo(value2) == 0) { System.out.println("value1等於value2"); } if (value1.compareTo(value2) == -1) { System.out.println("value1小於value2"); } Boolean flag = value1.compareTo(BigDecimal.ZERO) == 1 && value1.compareTo(BigDecimal.ONE) == -1; if (flag) { System.out.println("value1大於0小於1"); }
5、BigDecimal工具類:
import java.math.BigDecimal; public class BigDecimalUtil { private static final int DEF_DIV_SCALE = 10; private BigDecimalUtil(){} /** * 精准的加法運算 * @param v1 * @param v2 * @return */ public static double add(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.add(b2).doubleValue(); } /** * 精確減法計算 * @param v1 * @param v2 * @return */ public static double sub(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.subtract(b2).doubleValue(); } /** * 精確乘法計算 * @param v1 * @param v2 * @return */ public static double mul(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.multiply(b2).doubleValue(); } /** * 精確除法計算 * @param v1 * @param v2 * @return */ public static double div(double v1,double v2){ BigDecimal b1 = BigDecimal.valueOf(v1); BigDecimal b2 = BigDecimal.valueOf(v2); return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue(); } public static void main(String[] args) { double d1 = 12.897; double d2 = 3.87; System.out.println(BigDecimalUtil.add(d1,d2)); System.out.println(BigDecimalUtil.sub(d1, d2)); System.out.println(BigDecimalUtil.mul(d1, d2)); System.out.println(BigDecimalUtil.div(d1, d2)); } }
6、java中舍入方式:
第一種方法:
//保留兩位小數 double db = bigDecimalTwo.setScale(2, RoundingMode.HALF_UP).doubleValue(); System.out.println(db);
第二種方法:
//保留兩位小數 DecimalFormat df = new DecimalFormat("#.00"); df.format(bigDecimalTwo);
7、參考:
https://www.fangzhipeng.com/java/2019/09/01/use-bigdemecial.html