码迷,mamicode.com
首页 > 编程语言 > 详细

java中BigDecimal的学习

时间:2017-08-21 23:03:11      阅读:386      评论:0      收藏:0      [点我收藏+]

标签: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的学习

标签:4.0   tip   1.0   地方   一个   无限循环   ges   src   sys   

原文地址:http://www.cnblogs.com/tuhooo/p/7407028.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!