「java」為什麼要使用BigDecimal類型進行高精度運算

在日常開發中我們經常會碰到小數計算,而小數直接計算的話會出現一些小小的錯誤,如下

「java」為什麼要使用BigDecimal類型進行高精度運算

你說能輸出什麼?3.03?實際上輸出的是3.0300000000000002。這是因為不論是float 還是double都是浮點數,而計算機是二進制的,浮點數會失去一定的精確度。有沒有不失精度的辦法呢?這裡就要用到BigDecimal了。

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

創建BigDecimal對象主要有兩種。

「java」為什麼要使用BigDecimal類型進行高精度運算

其中b1也可以寫成new BigDecimal(Double.toString(1.34)),可以直接new BigDecimal(1.34)嗎,也是可以的,只是會出現上述的精度問題。

「java」為什麼要使用BigDecimal類型進行高精度運算

除了這兩種外,特殊的像0、1、10可以這樣寫。

「java」為什麼要使用BigDecimal類型進行高精度運算


分享到:


相關文章: