1. 程式人生 > >java中BigDecimal的學習

java中BigDecimal的學習

ont cnblogs con math println 廣泛 args img pre

幹著java的活,但是看的都是一些偏底層的東西(或者我根本就沒有看),有點荒廢了java的學習。

最近一直在用到一個類是BigDecimal,但都是模棱兩可地在那兒用,並沒有深入研究這個類的細節,感覺不能再拖了。

BigDecimal,從名字來看就是進行大數運算的,不光這樣,還廣泛用於小數的精確運算。

當你接觸到和錢有關的計算的時候,這個類還是很有用滴。

先來看一個例子

 1 package com.tuhooo.bigdecimal;
 2 
 3 /**
 4  * Created by tuhooo on 2017/8/21.
 5  */
 6 public class Demo1 {
 7     public
static void main(String[] args) { 8 System.out.println(0.06 + 0.01); 9 System.out.println(1.002 - 0.4); 10 System.out.println(4.015 * 100); 11 System.out.println(333.1 / 500); 12 } 13 }

講道理,上面的運算都還沒有涉及到無限循環小數呢,但是計算機給出的計算結果卻是這樣滴:

技術分享

其實原因很簡單,計算機的表示數的精度是有限滴,計算機底層用二進制來表示數據的時候,尤其是小數的時候精度更不好。

think about that,尼瑪,這種運算要是出現在和錢有關的地方,說高達上點就是金融有關的話,是不能接受的。

java中提供了一個很好的類——BigDecimal來解決這個問題。

 1 package com.tuhooo.bigdecimal;
 2 
 3 import java.math.BigDecimal;
 4 
 5 /**
 6  * Created by tuhooo on 2017/8/21.
 7  */
 8 public class Demo2 {
 9     public static void main(String[] args) {
10         System.out.println(new
BigDecimal("0.06").add(new BigDecimal("0.01"))); 11 System.out.println(new BigDecimal("1.002").subtract(new BigDecimal("0.4"))); 12 System.out.println(new BigDecimal("4.015").multiply(new BigDecimal("100"))); 13 System.out.println(new BigDecimal("333.1").divide(new BigDecimal("500"))); 14 } 15 }

看接下來的效果:

技術分享

再來看一個例子:

 1 package com.tuhooo.bigdecimal;
 2 
 3 import java.math.BigDecimal;
 4 
 5 /**
 6  * Created by tuhooo on 2017/8/21.
 7  */
 8 public class Demo3 {
 9     public static void main(String[] args) {
10         System.out.println(new BigDecimal(0.06).add(new BigDecimal(0.01)));
11         System.out.println(new BigDecimal(1.002).subtract(new BigDecimal(0.4)));
12         System.out.println(new BigDecimal(4.015).multiply(new BigDecimal(100)));
13         System.out.println(new BigDecimal(333.1).divide(new BigDecimal(500)));
14     }
15 }

技術分享

這裏可以發現,並不是用了BigDecimal就會有效果的,和BigDecimal的構造方式也有關系

to be continued......

java中BigDecimal的學習