1. 程式人生 > >MYSQL資料庫 的 decimal 欄位型別 和 Java 的BigDecimal

MYSQL資料庫 的 decimal 欄位型別 和 Java 的BigDecimal

mysql中的decimal , 在java中的用BigDecimal表示的。  

  • decimal

decimal(18,0) 18是定點精度,0是小數位數。

decimal(a,b) a指定指定小數點左邊和右邊可以儲存的十進位制數字的最大個數,最大精度38。

b指定小數點右邊可以儲存的十進位制數字的最大個數。小數位數必須是從 0 到 a之間的值。預設小數位數是 0。

  • BigDecimal

Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算。雙精度浮點型變數double可以處理16位有效數。在實際應用中,需要對更大或者更小的數進行運算和處理。float和double只能用來做科學計算或者是工程計算,在商業計算中要用java.math.BigDecimal。BigDecimal所建立的是物件,我們不能使用傳統的+、-、*、/等算術運算子直接對其物件進行數學運算,而必須呼叫其相對應的方法。方法中的引數也必須是BigDecimal的物件。構造器是類的特殊方法,專門用來建立物件,特別是帶有引數的物件。

  • BigDecimal的四則運算
BigDecimal a = new BigDecimal("123");
BigDecimal b = new BigDecimal("456");

BigDecimal c = a.add(b);// 加
BigDecimal d = a.subtract(b);// 減
BigDecimal e = a.multiply(b);// 乘

// 除
// 引數2:指定精度,保留6位小數 ; 引數3: 選擇舍入模式,此處為 四捨五入
BigDecimal f = a.divide(b, 6, BigDecimal.ROUND_HALF_UP);

// jdk 1.9中第三個引數 被RoundingMode取代
BigDecimal f = a.divide(b,RoundingMode.DOWN);//捨棄小數位
BigDecimal f = a.divide(b,2,RoundingMode.HALF_DOWN );//2位小數;舍入模式為大於0.5進1,否則捨棄。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

注: BigDecimal的除法,需要指定計算答案的精度, 不然計算機不知道你的精度為多少,會拋異常的。Exception in thread “main” java.lang.ArithmeticException

  • BigDecimal 的 signum() 方法 : 返回此 BigDecimal 的正負號。
//返回 1 表示值 為正值 ;  0 表示 為 0 ;  -1 表示 負數 。
BigDecimal a = new BigDecimal("123");
int b = a.signum(); // 結果是 1
  • 1
  • 2
  • 3
  • BigDecimal 的 compareTo()方法 , 比較大小 ; (不能直接使用算數運算子 == ,>, < 比較)
// 結果 : 1 表示 大於; 0 表示 等於; -1 表示 小於 .
BigDecimal a = new BigDecimal(0.5);
BigDecimal b = new BigDecimal(0.2);
int c = a.compareTo(b); // 結果 C = 1

--------------------- 本文來自 North_Spark 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/diyu122222/article/details/76887382?utm_source=copy