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):商,幾位小數,舍取模式
舉例1:
/** * 看程序寫結果:結果和我們想的有一點點不一樣,這是因為float類型的數據存儲和整數不一樣導致的。它們大部分的時候,都是帶有有效數字位。 * 由於在運算的時候,float類型和double很容易丟失精度,演示案例。所以,為了能精確的表示、計算浮點數,Java提供了BigDecimal * BigDecimal類:不可變的、任意精度的有符號十進制數,可以解決數據丟失問題。 */ public class BigDecimalDemo01 { public static void main(String[] args) { //輸出會出現精度問題 System.out.println(0.09 + 0.01); //0.09999999999999999 System.out.println(1.0 - 0.32); //0.6799999999999999 System.out.println(1.015 * 100); //101.49999999999999 System.out.println(1.301 / 100); //0.013009999999999999 System.out.println(1.0 - 0.12); //0.88 } }
舉例2:
public class BigDecimalDemo02 { public static void main(String[] args) { BigDecimal bd1 = new BigDecimal("0.09"); BigDecimal bd2 = new BigDecimal("0.01"); System.out.println("add:"+bd1.add(bd2)); System.out.println("------------------"); BigDecimal bd3 = new BigDecimal("1.0"); BigDecimal bd4 = new BigDecimal("0.32"); System.out.println("subtract:"+bd3.subtract(bd4)); System.out.println("------------------"); BigDecimal bd5 = new BigDecimal("1.015"); BigDecimal bd6 = new BigDecimal("100"); System.out.println("multiply:"+bd5.multiply(bd6)); System.out.println("------------------"); BigDecimal bd7 = new BigDecimal("1.301"); BigDecimal bd8 = new BigDecimal("100"); System.out.println("divide:"+bd7.divide(bd8)); System.out.println("divide:" + bd7.divide(bd8, 3, BigDecimal.ROUND_HALF_UP)); System.out.println("divide:" + bd7.divide(bd8, 8, BigDecimal.ROUND_HALF_UP)); System.out.println("------------------"); } }
輸出結果:
add:0.10
------------------
subtract:0.68
------------------
multiply:101.500
------------------
divide:0.01301
divide:0.013
divide:0.01301000
------------------
