【Java】BigDecimal.setScale用法總結


BigDecimal.setScale主要用於對BigDecimal數據小數點后的位數進行 進位、舍位、截斷等操作

 

BigDecimal使用說明

  1. 不建議,會造成精度損失

BigDecimal num1 = new BigDecimal(2.222222);

   2. 不建議,雖然不會損失精度

BigDecimal num2 = new BigDecimal(2);

   3. 建議,使用字符串格式構造,不會損失精度

 BigDecimal num = new BigDecimal("2.222222");

 

 

BigDecimal Rounding Modes

   1. ROUND_UP = 0

BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_UP); 
System.out.println(b); //2.23 進位處理,不管后面數字的大小
  2. ROUND_DOWN = 1
BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_DOWN); 
System.out.println(b); //2.22 去掉多余的位數,不管后面數字的大小

 

  3. ROUND_CEILING = 2

BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_CEILING); 
System.out.println(b);//2.23 如果是正數,相當於BigDecimal.ROUND_UP BigDecimal b = new BigDecimal("-2.222222").setScale(2, BigDecimal.ROUND_CEILING);
System.out.println(b);//-2.22 如果是負數,相當於BigDecimal.ROUND_DOWN

 

  4. ROUND_FLOOR = 3

BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_FLOOR); 
System.out.println(b);//2.22 如果是正數,相當於BigDecimal.ROUND_DOWN BigDecimal b = new BigDecimal("-2.222222").setScale(2, BigDecimal.ROUND_FLOOR);
System.out.println(b);//-2.23 如果是負數,相當於BigDecimal.ROUND_HALF_UP

 

  5. ROUND_HALF_UP = 4

 

BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_UP); 
System.out.println("ROUND_HALF_UP" + b); //2.22 根據后面的數字四舍五入(大於等於 5進位)

 

  6. ROUND_HALF_DOWN = 5

BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_DOWN); 
System.out.println("ROUND_HALF_DOWN" + b);//2.22 根據后面的數字四舍五入(大於 5進位)

 

  7. ROUND_HALF_EVEN = 6

 
BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_EVEN); 
System.out.println(b);//2.22 如果舍棄部分左邊的數字為偶數,則作 ROUND_HALF_DOWN BigDecimal b = new BigDecimal("2.222222").setScale(2, BigDecimal.ROUND_HALF_EVEN);
System.out.println(b);//2.22 如果舍棄部分左邊的數字為奇數,則作 ROUND_HALF_UP

 

  8. ROUND_UNNECESSARY = 7

 
BigDecimal b = new BigDecimal("2.22").setScale(3, BigDecimal.ROUND_UNNECESSARY); 
System.out.println(b); // Scale位數 必須小於等於 小數位數,否則會拋異常: java.lang.ArithmeticException: Rounding necessary

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM