干着java的活,但是看的都是一些偏底层的东西(或者我根本就没有看),有点荒废了java的学习。

最近一直在用到一个类是BigDecimal,但都是模棱两可地在那儿用,并没有深入研究这个类的细节,感觉不能再拖了。

BigDecimal,从名字来看就是进行大数运算的,不光这样,还广泛用于小数的精确运算。

当你接触到和钱有关的计算的时候,这个类还是很有用滴。

先来看一个例子

 package com.tuhooo.bigdecimal;

 /**
* Created by tuhooo on 2017/8/21.
*/
public class Demo1 {
public static void main(String[] args) {
System.out.println(0.06 + 0.01);
System.out.println(1.002 - 0.4);
System.out.println(4.015 * 100);
System.out.println(333.1 / 500);
}
}

讲道理,上面的运算都还没有涉及到无限循环小数呢,但是计算机给出的计算结果却是这样滴:

其实原因很简单,计算机的表示数的精度是有限滴,计算机底层用二进制来表示数据的时候,尤其是小数的时候精度更不好。

think about that,尼玛,这种运算要是出现在和钱有关的地方,说高大上点就是金融有关的话,是不能接受的。

java中提供了一个很好的类——BigDecimal来解决这个问题。

 package com.tuhooo.bigdecimal;

 import java.math.BigDecimal;

 /**
* Created by tuhooo on 2017/8/21.
*/
public class Demo2 {
public static void main(String[] args) {
System.out.println(new BigDecimal("0.06").add(new BigDecimal("0.01")));
System.out.println(new BigDecimal("1.002").subtract(new BigDecimal("0.4")));
System.out.println(new BigDecimal("4.015").multiply(new BigDecimal("100")));
System.out.println(new BigDecimal("333.1").divide(new BigDecimal("500")));
}
}

看接下来的效果:

再来看一个例子:

 package com.tuhooo.bigdecimal;

 import java.math.BigDecimal;

 /**
* Created by tuhooo on 2017/8/21.
*/
public class Demo3 {
public static void main(String[] args) {
System.out.println(new BigDecimal(0.06).add(new BigDecimal(0.01)));
System.out.println(new BigDecimal(1.002).subtract(new BigDecimal(0.4)));
System.out.println(new BigDecimal(4.015).multiply(new BigDecimal(100)));
System.out.println(new BigDecimal(333.1).divide(new BigDecimal(500)));
}
}

这里可以发现,并不是用了BigDecimal就会有效果的,和BigDecimal的构造方式也有关系

to be continued......

java中BigDecimal的学习的更多相关文章

  1. Java中BigDecimal的8种舍入模式是怎样的

    Java中BigDecimal的8种舍入模式是怎样的?下面长沙欧柏泰克软件学院和大家一起来学习下吧:  java.math.BigDecimal 不可变的.任意精度的有符号十进制数.BigDecima ...

  2. 关于java中BigDecimal的简介

    关于java中BigDecimal的简介 1.BigDecimal属于大数据,精度极高,不属于基本数据类型,属于java对象(引用数据类型), 这是sun提供的一个类,专门用在财务软件中. 2.注意: ...

  3. java中BigDecimal加减乘除基本用法

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数. 在实际应用中,需要对更大或者更小的数进 ...

  4. Java中BigDecimal的8种舍入模式

    java.math.BigDecimal 不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成. 如果为零或正数,则标度是小数点后的位 ...

  5. Java中BigDecimal的舍入模式

    java.math.BigDecimal 不可变的.任意精度的有符号十进制数.BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成. 如果为零或正数,则标度是小数点后的位 ...

  6. Java中BigDecimal类介绍及用法

    Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算. 其中 BigInteger 类是 ...

  7. [转]Java中BigDecimal的使用

    原文地址:https://blog.csdn.net/cen_s/article/details/76472834 在日常开发中我们经常会碰到小数计算,而小数直接计算的话会出现一些小小的错误,如下 S ...

  8. java中BigDecimal在金融行业中的使用

    1.引言 在java语言中,double和float用于二进制浮点型计算,无法得到精确的结果.而BigDecimal则用于精确的计算.不超过16位有效数字(最好是不超过13位)的科学和工程计算,可以使 ...

  9. java中容器的学习与理解

    以前一直对于java中容器的概念不理解,虽然学习过,但始终没有认真理解过,这几天老师提出了这样一个问题,你怎么理解java中的容器.瞬间就蒙了.于是各种搜资料学习了一下,下面是我学习后整理出来的的一些 ...

随机推荐

  1. BZOJ 2728: [HNOI2012]与非

    2728: [HNOI2012]与非 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 786  Solved: 371[Submit][Status][ ...

  2. transfered jquery plugin practice!

    jQuery插件开发入门 发表于 2014年05月23日 by 天涯孤雁 被浏览 20,897 次 ======2014-5-27 更新======= Require.js中使用jQuery 插件请查 ...

  3. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---37

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  4. 什麼是 usb upstream port

    主機USB埠是定義為USB纜線的上行端(Upstream)或「A」接頭,即PC端.而裝置USB埠是定義為USB纜線的下行端(Downstream)或「B」接頭,即行動產品端. Reference ht ...

  5. AC日记——[ZJOI2008]树的统计Count bzoj 1036

    1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 15007  Solved: 6092[Submit ...

  6. Codeforces Gym101473 A.Zero or One (2013-2014 ACM-ICPC Brazil Subregional Programming Contest)

    代码: #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #i ...

  7. TIOBE排行榜

    作者:码思客链接:https://zhuanlan.zhihu.com/p/37513668来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1 JAVA 毫无疑问的业界 ...

  8. 修改密码删除登陆态,那其他正在登陆的app怎么办?

    修改密码删除登陆态,那其他正在登陆的app怎么办?

  9. 【hibernate】Hibernate SQL 方言(hibernate.dialect)

    参考如下: RDBMS Dialect DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dial ...

  10. REMOTE HOST IDENTIFICATION HAS CHANGED 问题解决

    今天处理 ssh连接至 ubuntu 服务器时,提示以下错误: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING ...