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. ...
随机推荐
- 字符串匹配的Boyer-Moore(BM)算法
各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法. Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解.1977年,德克萨斯大学的Robe ...
- Poco::Crypto--加解密_RSA
Poco::Crypto--加解密(RSA) 1.简单的加解密 Cipher::Ptr pCipher = CipherFactory::defaultFactory().createCipher(R ...
- centos6.5磁盘扩容
3台虚拟机都是20G磁盘,用着用着发现不够了,先扩容了一台,各种百度...各种坑,每个人的情况不一样,发现不一样的地方最后立即百度查看.一台扩容成功后,打算再扩容一台,目的是留一个记录.(我是用xsh ...
- JVM·垃圾收集器与内存分配策略之垃圾收集器!
1.Serial(串行)收集器(新生代都采用复制算法) 这是个单线程的收集器:即 当他工作的时候,会停掉虚拟机所有的线程!(Stop The World)
- Android 应用防止被二次打包指南
前言 “Android APP二次打包”则是盗版正规Android APP,破解后植入恶意代码重新打包.不管从性能.用户体验.外观它都跟正规APP一模一样但是背后它确悄悄运行着可怕的程序,它会在不知不 ...
- 坚持:学习Java后台的第一阶段,我学习了那些知识
最近的计划是业余时间学习Java后台方面的知识,发现学习的过程中,要学的东西真多啊,让我一下子感觉很遥远.但是还好我制定了计划,自己选择的路,跪着也要走完!关于计划是<终于,我还是下决心学Jav ...
- Linux下的启动oracle的EM的命令
Linux下的启动oracle的EM的命令 1.启动数据库 su - oracle $sqlplus / as sysdba sql>startup 2.启动监听 $lsnrctl LSNRCT ...
- Confluence 6 配置时间和日期格式
你可以修改你 Confluence 为用户显示的时期和时间格式.设置的句法使用的是 SimpleDateFormat class,请参考 Java SimpleDateFormat 文档中的内容来设置 ...
- Confluence 6 审查日志的对象
审查日志记录一下事件的信息,这个记录不是详细的信息列表.但是这些信息能够让你了解你能够在日志中看到些什么内容. 空间 创建和删除一个空间. 编辑空间细节,主题,配色方案或者样式表. 修改空间权限,包括 ...
- 基于 Confluence 6 数据中心的 SAML 单点登录设置你的身份提供者
如果你希望 Confluence 提供 SSO,将需要将 Confluence 添加到你的 IdP 中.一些后续的步骤将会与你的 IdP 有关,但是你通常需要: 在你的 IdP 中定义一个 'appl ...