BigDecimal类用于高精度计算。一般的float型和Double型数据只可以用来做科学计算或者是工程计算,由于在商业计算中,要求的数字精度比较高,所以要用到java.math.BigDecimal类,它支持任何精度的定点数,可以用它来精确计算货币值。

有几点值得注意一下,

1、BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。

2、方法中的参数也必须是BigDecimal的对象。
     如:two.add(2)就是一种错误的操作,因为2没有变为BigInteger型。要写为BigInteger two=new BigInteger("2");

3、 BigDecimal一共有4个构造方法:
      BigDecimal(int)
      BigDecimal(double)
      BigDecimal(long)
      BigDecimal(String)
 
介绍一下BigDecimal的几个常用方法:

1、BigDecimal.divide(BigDecimal divisor, int scale, RoundingMode roundingMode);

/**

*   两个BigDecimal相除

*   返回一个BigDecimal,精确位数为scale指定值,舍入方式为roundingMode

*   ROUND_HALF_UP:向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6(四舍五入)

*/

eg:

BigDecimal bd1 = new BigDecimal(Double.toString(v1));

BigDecimal bd2 = new BigDecimal(Double.toString(v2));

double pricediscount=bd1.divide(bd2, 2, BigDecimal.ROUND_HALF_UP).doubleValue();

2、BigDecimal.add(BigDecimal augend, MathContext mc)
     /**

*   两个BigDecimal相加

*   返回一个BigDecimal,舍入方式为mc

*/

eg:

BigDecimal bd1 = new BigDecimal(Double.toString(v1));

BigDecimal bd2 = new BigDecimal(Double.toString(v2));

double pricediscount=bd1.add(bd2).doubleValue().doubleValue();

其他方法参照

参数类型为 MathContext 的 java.math 中的方法
 BigDecimal BigDecimal.abs(MathContext mc)
          返回其值为此 BigDecimal 绝对值的 BigDecimal(根据上下文设置进行舍入)。
 BigDecimal BigDecimal.add(BigDecimal augend, MathContext mc)
          返回其值为 (this + augend)BigDecimal(根据上下文设置进行舍入)。
 BigDecimal BigDecimal.divide(BigDecimal divisor, MathContext mc)
          返回其值为 (this / divisor)BigDecimal(根据上下文设置进行舍入)。
 BigDecimal BigDecimal.divideAndRemainder(BigDecimal divisor, MathContext mc)
          返回由两个元素组成的 BigDecimal 数组,该数组包含 divideToIntegralValue 的结果,后跟根据上下文设置对两个操作数进行舍入计算所得到的 remainder 的结果。
 BigDecimal BigDecimal.divideToIntegralValue(BigDecimal divisor, MathContext mc)
          返回 BigDecimal,其值为 (this / divisor) 的整数部分。
 BigDecimal BigDecimal.multiply(BigDecimal multiplicand, MathContext mc)
          返回其值为 (this × multiplicand)BigDecimal(根据上下文设置进行舍入)。
 BigDecimal BigDecimal.negate(MathContext mc)
          返回其值为 (-this)BigDecimal(根据上下文设置进行舍入)。
 BigDecimal BigDecimal.plus(MathContext mc)
          返回其值为 (+this)BigDecimal(根据上下文设置进行舍入)。
 BigDecimal BigDecimal.pow(int n, MathContext mc)
          返回其值为 (thisn)BigDecimal
 BigDecimal

BigDecimal.remainder(BigDecimal divisor, MathContext mc)
          返回其值为 (this % divisor)BigDecimal(根据上下文设置进行舍入)。

 BigDecimal

BigDecimal.round(MathContext mc)

返回根据 MathContext 设置进行舍入后的 BigDecimal

 BigDecimal

BigDecimal.subtract(BigDecimal subtrahend, MathContext mc)

返回其值为 (this - subtrahend)BigDecimal(根据上下文设置进行舍入)。

 
 

java.math.BigDecimal类的更多相关文章

  1. java.math.BigDecimal类multiply的使用

    java.math.BigInteger.multiply(BigInteger val) 返回一个BigInteger,其值是 (this * val).声明 以下是java.math.BigInt ...

  2. Java中BigDecimal类介绍及用法

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

  3. Java 使用BigDecimal类处理高精度计算

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

  4. java基础-BigDecimal类常用方法介绍

    java基础-BigDecimal类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigDecimal类概述 我们知道浮点数的计算结果是未知的.原因是计算机二进制 ...

  5. java.math.BigDecimal

    package day14; import java.math.BigDecimal; /** * Created by admin on 2018/11/24. * 看程序写结果:结果和我们想的有一 ...

  6. java.math.BigDecimal保留两位小数,保留小数,精确位数

    http://blog.csdn.net/yuhua3272004/article/details/3075436 使用java.math.BigDecimal工具类实现   java保留两位小数问题 ...

  7. 商业计算中Java高精度计算BigDecimal类

    <Effective Java> 第48条:如果需要精确的答案,请避免使用float和double. 如果我们编译运行下面这个程序会看到什么?public class Test{    p ...

  8. Java中BigDecimal类的常用方法

    1.简介 BigDecimal类位于java.math.BigDecimal包下.使用此类可以完成大的小数操作,而且也可以使用此类进行精确的四舍五入,这一点在开发中经常使用. 对于不需要任何准确计算精 ...

  9. java.math.BigDecimal()的用法

    Java中简单的浮点数类型float和double是不能进行运算的,不光Java,很多语言都是这样. 我们运行下面程序你将会看到 public class TestMathDecimal { publ ...

随机推荐

  1. Linux下的各种软件安装方法汇总

    1 RPM包 1.1 安装 RPM包就像Windows的EXE安装文件一样,各种文件都已经编译好了,并进行了打包,哪一个文件应该放在哪一个目录下都指定好了,安装非常方便,在图形界面里你只需要双击就能自 ...

  2. duang体加班版

    领导第一次让我加班的时候,其实我是拒绝的,因为我觉着加班这个事,不能你让我加我就加,晚了就没有地铁了..领导跟我说可以打车报销.加了一个月之后,我的钱包duang~,后来我知道报销其实是假的,我每天打 ...

  3. OFFSET & FETCH

    OFFSET & FECTH 关键字与ORDER BY结合使用,实现对查询结果的分页 一.单独使用OFFSET: 示例:查询所有职员的信息,按雇佣日期排序并跳过前285条记录(共290条) U ...

  4. java基础学习(一)

    去年10月份从学校出来实习,从事javaWeb方面的开发.到现在已经快1年了.突然间感觉自己的java基础知识忘记的很厉害,或者说知识掌握的不牢吧.回顾自己学习java,发现我竟然一本关于java基础 ...

  5. linux下配置固定ip

    今天在VM上装linux6.3,装的时候没有配置ip,虚拟机连接方式选的NAT方式,可以直接上网.我装这几次虚拟机系统只有这次虚拟机上去网了,挺爽.但是问题又出来了,就是我本机Windows远程不上虚 ...

  6. bzoj1827 [Usaco2010 Mar]gather 奶牛大集会

    不就是移一下树根,回溯一下吗? 诶?黄学长为什么可以直接找? 诶?这不是重心吗? YY了一下证明 很简单 由于重心max{sz[v]} <= sz[u] / 2的性质,可以证明每一步远离重心的移 ...

  7. 如何在word2007中并排查看对比显示两个文档

    使用word编辑或修改文件时,有时会需要对两个文档进行对比,此时就应该使用并排查看功能. 点击“视图”菜单中的“并排查看” 所打开的两个文档就会同时打开,并排显示 可点击“同步滚动”设置或取消同步滚动

  8. TOJ3660家庭关系(并查集+hash+图的连通性)

    家庭关系   时间限制(普通/Java):1000MS/3000MS     运行内存限制:65536KByte 总提交: 38            测试通过: 9 描述 给定若干家庭成员之间的关系 ...

  9. 改变Android按钮背景颜色的高效方法

    本文将介绍一种有效改变Android按钮颜色的方法. 按钮可以在状态改变时改变其颜色(例如按下,禁用,高亮显示).但是,这需要一一说明每个状态.这篇文章将提供你一个根据状态变化轻松改变按钮颜色的方法. ...

  10. 08_android入门_android-async-http开源项目介绍及用法

    android-async-http开源项目可以是我们轻松的获取网络数据或者向server发送数据.使用起来很easy,关于android-async-http开源项目的介绍内容来自于官方:http: ...