java.math.BigDecimal类提供用于算术,刻度操作,舍入,比较,哈希算法和格式转换操作。

toString()方法提供BigDecimal的规范表示。它使用户可以完全控制舍入行为。

提供用于操作BigDecimal规模两种类型的操作:

  • 缩放/舍入操作
  • 小数点移动操作。

此类及其迭代器实现Comparable接口的所有可选方法。

一、类的详解

类声明

1
2
public class BigDecimal extends Number implements Comparable<bigdecimal>
</bigdecimal>

字段域

以下是java.math.BigDecimal类中的字段:

  • static BigDecimal ONE-- 值为1,使用刻度为0。

  • static BigDecimal TEN--值为10,使用刻度为0。

  • static BigDecimal ZERO--值为0,使用刻度为0。

  • static int ROUND_CEILING-- 舍入模式舍向正无穷。正数效果同ROUND_UP举例如:1.239得到的是1.24;负数效果举例如:-1.239得到的是-1.23

  • static int ROUND_DOWN-- 舍入模式,向零舍入(即舍弃后边所有,不向前进1)。

  • static int ROUND_FLOOR-- 舍入模式接近负无穷大。正数效果同ROUND_DOWN举例如:1.239得到的是1.23;负数效果举例如:-1.239得到的是-1.23

  • static int ROUND_HALF_DOWN-- 遵循四舍五入规则,大于5向前一位进1。

  • static int ROUND_HALF_EVEN-- 舍入模式舍对“近邻”如果与两个相邻数字的距离相等,在这种情况下,舍入向着更加相邻(正负数都是向着0相邻舍入)。

  • static int ROUND_HALF_UP-- 遵循四舍五入规则,大于等于5向前一位进1。

  • static int ROUND_UNNECESSARY-- 舍入模式断言请求的操作具有精确的结果,因此不需要舍入。用于获取运算结果。

  • static int ROUND_UP--舍入模式,舍入去零,零不舍入。

类构造函数

S.N. 构造函数 & 描述
1 BigDecimal(BigInteger val)
这个构造函数是用来将BigInteger转换为BigDecimal。
2 BigDecimal(BigInteger unscaledVal, int scale)
这个构造函数用于转换为BigInteger非标度值和一个int尺度成一个BigDecimal。
3 BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
这个构造函数用于转换为BigInteger非标度值和一个int尺度转换为BigDecimal,有根据上下文设置进行舍入。
4 BigDecimal(BigInteger val, MathContext mc)
此构造函数用于根据上下文设置将BigInteger转换为BigDecimal舍入。
5 BigDecimal(char[ ] in)
此构造函数用于将BigDecimal字符数组表示转化为BigDecimal,接受相同的字符序列与BigDecimal(String)构造函数。
6 BigDecimal(char[ ] in, int offset, int len)
此构造函数用于将BigDecimal的字符数组表示转化为BigDecimal,接受字符与BigDecimal(String)构造方法相同的字符序列,同时允许指定子数组。
7 BigDecimal(char[ ] in, int offset, int len, MathContext mc)
此构造函数用于将BigDecimal的字符数组表示转化为BigDecimal,接受字符与BigDecimal(String)构造方法相同的字符序列,同时允许指定子数组,并与根据上下文设置进行舍入。
8 BigDecimal(char[ ] in, MathContext mc)
此构造函数用于将BigDecimal的字符数组表示转化为BigDecimal,接受相同的字符序列与BigDecimal(String)构造和根据上下文设置进行舍入。
9 BigDecimal(double val)
这个构造函数是用来转换double为一个BigDecimal,它是双的二进制浮点值的精确十进制表示。
10 BigDecimal(double val, MathContext mc)
这个构造函数是用来转换double为一个BigDecimal,有根据上下文设置进行舍入。
11 BigDecimal(int val)
这个构造函数是用来转换一个int转换为BigDecimal。
12 BigDecimal(int val, MathContext mc)
这个构造函数是用来转换一个int转换为BigDecimal,有根据上下文设置进行舍入。
13 BigDecimal(long val)
这个构造函数用于转换long为一个BigDecimal。
14 BigDecimal(long val, MathContext mc)
这个构造函数是将BigInteger转换为BigDecimal。
15 BigDecimal(String val)
此构造函数用于一个BigDecimal的字符串表示形式转换为BigDecimal。
16 BigDecimal(String val, MathContext mc)
此构造函数用于将BigDecimal的字符串表示形式转换为BigDecimal,接受相同的字符串作为与BigDecimal(String)构造,并根据上下文设置进行舍入。

类方法

S.N. 方法 & 描述
1 BigDecimal abs()
此方法返回一个BigDecimal,其值是此BigDecimal的绝对值,其标度是this.scale()。
2 BigDecimal abs(MathContext mc)
此方法返回一个BigDecimal,其值是此BigDecimal的绝对值,与根据上下文设置进行舍入。
3 BigDecimal add(BigDecimal augend)
此方法返回一个BigDecimal,其值为(this + augend),其标度为max(this.scale(), augend.scale())。
4 BigDecimal add(BigDecimal augend, MathContext mc)
此方法返回一个BigDecimal,其值为(this + augend),与根据上下文设置进行舍入。
5 byte byteValueExact()
这种方法的BigDecimal转换为一个字节,检查丢失的信息。
6 int compareTo(BigDecimal val)
这种方法比较BigDecimal与指定的BigDecimal。
7 BigDecimal pide(BigDecimal pisor)
此方法返回一个BigDecimal,其值为(this/除数),且其首选标度为(this.scale() - pisor.scale());如果准确的商不能表示(因为它有无穷的十进制扩展),则抛出ArithmeticException。
8 BigDecimal pide(BigDecimal pisor, int roundingMode)
此方法返回一个BigDecimal,其值为(this/除数),其标度是this.scale()。
9 BigDecimal pide(BigDecimal pisor, int scale, int roundingMode)
此方法返回一个BigDecimal,其值为(this/除数),其标度如指定。
10 BigDecimal pide(BigDecimal pisor, int scale, RoundingMode roundingMode)
此方法返回一个BigDecimal,其值为(this/除数),其标度为指定。
11 BigDecimal pide(BigDecimal pisor, MathContext mc)
此方法返回一个BigDecimal,其值为(this/除数),与根据上下文设置进行舍入。
12 BigDecimal pide(BigDecimal pisor, RoundingMode roundingMode)
此方法返回一个BigDecimal,其值为(this/除数),其标度是this.scale()。
13 BigDecimal[ ] pideAndRemainder(BigDecimal pisor)
这个方法返回一个包含pideToIntegralValue结果,其次是剩下的两个操作数的结果的结果由两个元素组成的BigDecimal数组。
14 BigDecimal[ ] pideAndRemainder(BigDecimal pisor, MathContext mc)
这个方法返回一个包含pideToIntegralValue的结果,随后其余与上根据上下文设置进行舍入计算两个操作数的结果的结果由两个元素组成的BigDecimal数组。
15 BigDecimal pideToIntegralValue(BigDecimal pisor)
此方法返回一个BigDecimal,其值为商(这/除数)的整数部分四舍五入。
16 BigDecimal pideToIntegralValue(BigDecimal pisor, MathContext mc)
此方法返回一个BigDecimal,其值是(这/除数)的整数部分。
17 double doubleValue()
此方法将BigDecimal转换为double。
18 boolean equals(Object x)
这种方法比较BigDecimal与指定对象是否相等。
19 float floatValue()
这种方法将BigDecimal转换为float。
20 int hashCode()
此方法返回BigDecimal的哈希代码。
21 int intValue()
这种方法将BigDecimal转换为int。
22 int intValueExact()
这种方法将BigDecimal转换为int,检查丢失的信息。
23 long longValue()
这种方法将BigDecimal转换为long。
24 long longValueExact()
这种方法将BigDecimal转换为long,检查丢失的信息。
25 BigDecimal max(BigDecimal val)
此方法返回此BigDecimal和val的最大值。
26 BigDecimal min(BigDecimal val)
此方法返回此BigDecimal和val的最小值。
27 BigDecimal movePointLeft(int n)
此方法返回一个BigDecimal,它等效于将该值的小数点移动n位到左边。
28 BigDecimal movePointRight(int n)
此方法返回一个BigDecimal,它等效于将该值的小数点移动n位到右边。
29 BigDecimal multiply(BigDecimal multiplicand)
此方法返回一个BigDecimal,其值为(this×被乘数),其标度为(this.scale()+ multiplicand.scale())。
30 BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
此方法返回一个BigDecimal,其值为(this×乘数),以根据上下文设置进行舍入。
31 BigDecimal negate()
此方法返回一个BigDecimal,其值是(+this),其标度是this.scale()。
32 BigDecimal negate(MathContext mc)
此方法返回一个BigDecimal,其值是(-this),根据上下文设置进行舍入。
33 BigDecimal plus()
此方法返回一个BigDecimal,其值是(+this),其标度是this.scale()。
34 BigDecimal plus(MathContext mc)
此方法返回一个BigDecimal,其值是(+this),根据上下文设置进行舍入。
35 BigDecimal pow(int n)
此方法返回一个BigDecimal,其值是(thisn),幂被精确计算,使其具有无限精度。
36 BigDecimal pow(int n, MathContext mc)
此方法返回一个BigDecimal,其值是 (thisn).
37 int precision()
此方法返回此BigDecimal的精度。
38 BigDecimal remainder(BigDecimal pisor)
此方法将BigDecimal转换为一个byte,检查丢失的信息。
39 BigDecimal remainder(BigDecimal pisor, MathContext mc)
此方法返回一个BigDecimal,其值为(this%除数),根据上下文设置进行舍入。
40 BigDecimal round(MathContext mc)
此方法返回根据MathContext设置舍入一个BigDecimal。
41 int scale()
此方法返回此BigDecimal的标度。
42 BigDecimal scaleByPowerOfTen(int n)
此方法返回一个BigDecimal,其数值等于 (this * 10n).
43 BigDecimal setScale(int newScale)
此方法返回一个BigDecimal,其标度为指定值,其值在数值上等于该BigDecimal。
44 BigDecimal setScale(int newScale, int roundingMode)
此方法返回一个BigDecimal,其标度为指定值,其非标度值乘以或除以此BigDecimal的非标度值除以十的次幂,以保持其整体值决定。
45 BigDecimal setScale(int newScale, RoundingMode roundingMode)
此方法返回一个BigDecimal,其标度为指定值,其非标度值乘以或除以此BigDecimal的非标度值除以十的次幂,以保持其整体价决定。
46 short shortValueExact()
这种方法将BigDecimal转换为short,检查丢失的信息。
47 int signum()
此方法返回此BigDecimal的正负号函数。
48 BigDecimal stripTrailingZeros()
此方法返回一个BigDecimal,它在数值上等于这一个,但与从表示形式移除所有尾部零。
49 BigDecimal subtract(BigDecimal subtrahend)
此方法返回一个BigDecimal,其值为(this - 减数),其标度为max(this.scale(),subtrahend.scale())。
50 BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
此方法返回一个BigDecimal,其值为(this - 减数),与根据上下文设置进行舍入。
51 BigInteger toBigInteger()
这种方法将BigDecimal转换为BigInteger。
52 BigInteger toBigIntegerExact()
这种方法将BigDecimal转换为BigInteger,检查丢失的信息。
53 String toEngineeringString()
此方法返回此BigDecimal的字符串表示形式,使用工程计数法,如果需要指数。
54 String toPlainString()
此方法返回此BigDecimal的字符串表示形式不带指数字段。
55 String toString()
此方法返回此BigDecimal的字符串表示形式,用科学记数法,如果需要指数。
56 BigDecimal ulp()
此方法返回一个ULP的此BigDecimal的大小,在最后一位的单位。
57 BigInteger unscaledValue()
此方法返回一个BigInteger,其值是此BigDecimal的非标度值。
58 static BigDecimal valueOf(double val)
这种方法转换double为一个BigDecimal,使用Double.toString(double)方法提供的double的规范化字符串表示形式。
59 static BigDecimal valueOf(long val)
这种方法将一个long值转换为BigDecimal带有刻度的零值。
60 static BigDecimal valueOf(long unscaledVal, int scale)
这种方法转换long的非标度值和一个int尺度成一个BigDecimal。

鸣谢:https://www.2cto.com/kf/201608/533725.html

二、类的应用

  在java中,两个浮点数进行加减运算,和乘除中不是整数的运算,这些的运算结果将可能被显示出更多的小数位。所以就需要用到BigDecimal类提供的运算方法进行运算。

    举例说明:两个数相乘。

      方式一:

BigDecimal bigDecimal1=new BigDecimal(1.2);
BigDecimal bigDecimal2=new BigDecimal(2);
String result=bigDecimal1.multiply(bigDecimal2).toPlainString()
结果是:result=2.3999999999999999999.......;
BigDecimal bigDecimal1=new BigDecimal(1.2+"");
BigDecimal bigDecimal2=new BigDecimal(2+"");
String result=bigDecimal1.multiply(bigDecimal2).toPlainString()
结果是:result=2.4;
    
   通过上面例子的对比,可知,在这种情况之下,进行加减乘除运算时,创建BigDecimal对象时,传入的参数要用字符串。

Java BigDecimal详解,提供了丰富的四舍五入规则的更多相关文章

  1. Java BigDecimal详解

    借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供 较为精确的快速近 ...

  2. Java之BigDecimal详解

    一.BigDecimal概述 ​ Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数,但在实 ...

  3. 【java提高】(19)---BigDecimal详解和精度问题

    BigDecimal详解和精度问题 一.背景 在实际开发中,对于 不需要任何准确计算精度的属性可以直接使用float或double,但是如果需要精确计算结果,则必须使用BigDecimal,例如价格. ...

  4. Java集合详解3:一文读懂Iterator,fail-fast机制与比较器

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  5. Java面向对象详解

    Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵 ...

  6. Java synchronized 详解

    Java synchronized 详解 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 1.当两个并发线程访问同一个对象object ...

  7. java集合详解

    1.java集合框架的层次结构 Collection接口: Set接口: HashSet具体类 LinkedHashSet具体类 TreeSet具体类 List接口:   ArrayList具体类 L ...

  8. Java Annotation详解 理解和使用Annotation

    系统中用到了java注解: 查了一下如何使用注解,到底注解是什么: (1)创建方法:MsgTrace Java Class==> 在Create New Class中: name:输入MsgTr ...

  9. Java ClassLoad详解

    Java ClassLoad详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1. ...

随机推荐

  1. 相关子查询和嵌套子查询 [SQL Server]

    SQLServer子查询可以分为 相关子查询 和 嵌套子查询 两类.前提,假设Books表如下: 类编号  图书名         出版社               价格-------------- ...

  2. Oracle管理文件OMF (oracle managed files)

    简化dba的管理操作 1:启用 omf 23:16:04 SYS@orcl> show parameter DB_CREATE_FILE_DEST NAME TYPE VALUE ------- ...

  3. SpringMvc + Jsp+ 富文本 kindeditor 进行 图片ftp上传nginx服务器 实现

    一:html 原生态的附件上传 二:实现逻辑分析: 1.1.1 需求分析 Common.js 1.绑定事件 2.初始化参数 3.上传图片的url: /pic/upload 4.上图片参数名称: upl ...

  4. select下拉框的数据回显

    需求描述:select框,下拉后又很多的选项,选择一个,根绝后台代码做查询,完成之后,页面上的select框还是之前选的那个值 解决思路:select本质就是 value和text一一对应,根据你的s ...

  5. 《剑指offer》 树的子结构

    本题来自<剑指offer> 树的子结构 题目: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路: 分两步走: 第一步:判断根节点,两个根节 ...

  6. bzoj 3566

    非常好也是比较难的题 首先,不难看出这是一道树形的概率dp 那么我们就要考虑转移 我们发现,一个点能充上电的概率是这个点本身通电的概率+这个点的子节点给他传过来电的概率+这个点的父节点给他传过来电的概 ...

  7. ajax对象方法的使用

    change.js文件的内容对象函数关键字:fnjQuery.fn.change = function () { this.css({"background": "red ...

  8. MSTM年底总结

    项目简介 做完这个项目,自己也做了测试,功能是正常可以使用的,暂时还没有上线,这个项目是用来卖课的,我自己做的是各个种类课程的展示,登录认证,还有各个接口,还有支付环节,还有微信推送消息,加入他们要买 ...

  9. python:字符串转换成字节的三种方式及字符转码问题

    str='zifuchuang' 第一种 b'zifuchuang'第二种bytes('zifuchuang',encoding='utf-8')第三种('zifuchuang').encode('u ...

  10. 如何设置Navicat的显示字体与字体大小?

    方法/步骤     打开Navicat   点击[工具]菜单,再选择[选项]   在[选项]界面,点击[外观]下的[字体]   设置网格字体和大小   设置编辑器字体和大小   设置命令列界面字体和大 ...