干着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. PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码

    在用PowerDesigner时.常常在NAME或Comment中写中文在Code中写英文.Name只会显示给我们看,Code会使用在代码中.但Comment中的文字会保存到数据库TABLE的Desc ...

  2. duilib入门简明教程 -- 界面设计器 DuiDesigner (10) (转)

    原文转自:http://www.cnblogs.com/Alberl/p/3343838.html     上一个教程讲解了怎么布局最大化.最小化.关闭按钮,但是如果手动去计算这三个按钮的位置和大小的 ...

  3. sublime 中设置pylint

    http://www.360doc.com/content/14/1110/11/15077656_424004081.shtml 安装 pylinter 插件   详见 sublime 插件安装 配 ...

  4. 2016北京集训测试赛(十七)Problem B: 银河战舰

    Solution 好题, 又是长链剖分2333 考虑怎么统计答案, 我场上的思路是统计以一个点作为结尾的最长上升链, 但这显然是很难处理的. 正解的方法是统计以每个点作为折弯点的最长上升链. 具体的内 ...

  5. ArcGIS 10.2 二次开发,兼容Visual Studio 2012二次开发,完美安装教程

    GIS 经常安装是常有的事,每次重装系统都要浪费大半天去安装这个.所以凑这一次安装,把这个软件重新安装的步骤整理了一下,希望对大家有所帮助.这次整理的内容的关键优点是,对常见的出错内容进行了归纳整理. ...

  6. 给力Mac下的思维整理软件,思维导图软件合辑

    给力Mac下的思维整理软件,思维导图软件合辑 1.Mindjet MindManager for mac 10.0.211 经典的头脑风暴思维导图软件 最新破解Mindjet MindManager ...

  7. 【spring boot logback】日志logback格式解析

    日志logback格式解析 logback官网 格式解析 https://logback.qos.ch/manual/layouts.html#ClassicPatternLayout 官网格式解析有 ...

  8. 状态压缩DP常遇到的位运算

    位操作一共有6种形式:<<,>>,&,|,^,~; 1.左移操作符<<:左移操作符将整数的二进制向左移若干位,将最高若干位挤掉,并在低位补0 如: ; // ...

  9. IntelliJ IDEA创建文件时自动填入作者时间 定制格式

    IntelliJ IDEA创建文件时自动填入作者时间 定制格式 学习了:https://blog.csdn.net/Hi_Boy_/article/details/78205483 学习了:http: ...

  10. FMSC 使用理解

    看了非常长时间 FMSC资料 都说的模糊的. 事实上非常easy: fsmc就是为了扩展内存的,如我们在stm32芯片外加入一个sram芯片.那么我们仅仅须要把 sram芯片的地址线和数据线和stm3 ...