Java BigDecimal详解,提供了丰富的四舍五入规则
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详解,提供了丰富的四舍五入规则的更多相关文章
- Java BigDecimal详解
借用<Effactive Java>这本书中的话,float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供 较为精确的快速近 ...
- Java之BigDecimal详解
一.BigDecimal概述 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算.双精度浮点型变量double可以处理16位有效数,但在实 ...
- 【java提高】(19)---BigDecimal详解和精度问题
BigDecimal详解和精度问题 一.背景 在实际开发中,对于 不需要任何准确计算精度的属性可以直接使用float或double,但是如果需要精确计算结果,则必须使用BigDecimal,例如价格. ...
- Java集合详解3:一文读懂Iterator,fail-fast机制与比较器
<Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...
- Java面向对象详解
Java面向对象详解 前言:接触项目开发也有很长一段时间了,最近开始萌发出想回过头来写写以前学 过的基础知识的想法.一是原来刚开始学习接触编程,一个人跌跌撞撞摸索着往前走,初学的时候很多东西理解的也懵 ...
- Java synchronized 详解
Java synchronized 详解 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 1.当两个并发线程访问同一个对象object ...
- java集合详解
1.java集合框架的层次结构 Collection接口: Set接口: HashSet具体类 LinkedHashSet具体类 TreeSet具体类 List接口: ArrayList具体类 L ...
- Java Annotation详解 理解和使用Annotation
系统中用到了java注解: 查了一下如何使用注解,到底注解是什么: (1)创建方法:MsgTrace Java Class==> 在Create New Class中: name:输入MsgTr ...
- Java ClassLoad详解
Java ClassLoad详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1. ...
随机推荐
- python深浅拷贝与赋值
初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...
- python字符串前面u,r,b的含义详解
u/U:表示unicode字符串 不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码. 一般英文字符在使用各种编码下, 基本都可以正常解析, 所以一般不带u:但是中文, ...
- SQL Server管理员必备技能之性能优化
SQL Server管理员必备技能之性能优化 高文龙关注1人评论1171人阅读2017-09-22 08:27:41 SQL Server 作为企业必不可少的服务之一,所以对于管理员的日常运维是一个极 ...
- Confluence 6 使用 Apache 和 mod_proxy 添加 SSL和其他
添加 SSL 如果你计划在你的应用中启用 SSL ,请参考 Securing your Atlassian applications with Apache using SSL页面中的内容,并确定你在 ...
- Confluence 6 链接到其他应用
应用链接(Application Links)有时候也被称为 "AppLinks" 是一系列测插件能够允许你在 Atlassian 的应用中互相链接.链接 2 个应用能够允许你在 ...
- Confluence 6 导入模板的定义
模板是一个预先定义的页面,这个预先定义的页面可以在创建新页面的时候预先载入.模板能够给一个页面统一的样式或格式. 你可以在 Confluence 中创建你自己的模板,请查看页面 Create a Te ...
- Confluence 6 在编辑器中控制参数的显示
你可以决定宏参数在 Confluence 编辑器中如何进行显示的. 在默认的情况下,在宏占位符下尽可能显示能显示的所有参数: 你可以控制这里显示的参数数量,通过这种控制你可能尽量的为编辑者提供有效的信 ...
- LoadRunner学习笔记
什么是性能测试: 简单说,功能测试是软件是否能用,性能测试是看软件好不好用: 性能测试的含义,大体来讲就是通过自动化的手段,模拟生产运行的业务压力或者相应的场景,来测试协同系统是否满足生产需要. 性能 ...
- SpringMVC 框架完成图片上传到项目路径操作
/** * 保存添加 * * @return */ @RequestMapping(value = "taizhang/add.action", method = { Reques ...
- Python函数之匿名函数
一:概述 匿名函数主要用来处理比较简单的逻辑,用一行显示,并将运算结果作为返回值返回 二:书写规则 函数名 = lambda 参数:返回值 参数可以有多个,多个参数使用逗号分隔 三 :例子 将func ...