標籤:4.0 tip 1.0 地方 一個 無限迴圈 ges src sys
乾著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的學習