干着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......
时间: 2024-12-25 13:18:01