BigDecimal類操作小數

java操作小數

1 BigDecimal類概述

由於在運算的時候,float類型和double很容易丟失精度,演示案例。所以,爲了能精確的表示、計算浮點數,Java提供了BigDecimal   不可變的、任意精度的有符號十進制數。

2 構造方法

public BigDecimal(String val):建議使用參數爲字符串的構造方法,如果參數爲double或float,還是會出現不可預知的精度問題

3 BigDecimal類成員方法

public BigDecimal add(BigDecimal augend):加        

public BigDecimal subtract(BigDecimal subtrahend):減        

public BigDecimal multiply(BigDecimal multiplicand):乘        

public BigDecimal divide(BigDecimal divisor):除        

public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode):商,幾位小數,舍取模式

3.1 ROUND_DOWN

BigDecimal b = new BigDecimal("2.225667").setScale(2, BigDecimal.ROUND_DOWN);
	System.out.println(b);//2.22 直接去掉多餘的位數

3.2 ROUND_UP

BigDecimal c = new BigDecimal("2.224667").setScale(2, BigDecimal.ROUND_UP);
	System.out.println(c);//2.23 跟上面相反,進位處理

3.3 ROUND_CEILING

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

3.4 ROUND_FLOOR

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

3.5 ROUND_HALF_UP

BigDecimal d = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_UP);
	System.out.println("ROUND_HALF_UP"+d); //2.23  四捨五入(若捨棄部分>=.5,就進位)

3.6 ROUND_HALF_DOWN

BigDecimal e = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_DOWN);
	System.out.println("ROUND_HALF_DOWN"+e);//2.22  四捨五入(若捨棄部分>.5,就進位)

3.7 ROUND_HALF_EVEN

BigDecimal j = new BigDecimal("2.225").setScale(2, BigDecimal.ROUND_HALF_EVEN);
	System.out.println(j);//2.22 如果捨棄部分左邊的數字爲偶數,則作   ROUND_HALF_DOWN 
			
BigDecimal k = new BigDecimal("2.215").setScale(2, BigDecimal.ROUND_HALF_EVEN);
	System.out.println(k);//2.22 如果捨棄部分左邊的數字爲奇數,則作   ROUND_HALF_UP

3.8 ROUND_UNNECESSARY

BigDecimal l = new BigDecimal("2.215").setScale(3, BigDecimal.ROUND_UNNECESSARY);
	System.out.println(l);
	//斷言請求的操作具有精確的結果,因此不需要舍入。
	//如果對獲得精確結果的操作指定此舍入模式,則拋出ArithmeticException。

4 附送處理小數的其他方法

   double d = 756.2345566;

 //方法一:最簡便的方法,調用DecimalFormat類
   DecimalFormat df = new DecimalFormat(".00");
   System.out.println(df.format(d));

   //方法二:直接通過String類的format函數實現
   System.out.println(String.format("%.2f", d));

   //方法三:通過BigDecimal類實現
   BigDecimal bg = new BigDecimal(d);
   double d3 = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
   System.out.println(d3);

   //方法四:通過NumberFormat類實現
   NumberFormat nf = NumberFormat.getNumberInstance();
   nf.setMaximumFractionDigits(2);
   System.out.println(nf.format(d));

作者:pony_hjc
來源:CSDN
原文:https://editor.csdn.net/md/?articleId=107001730
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章