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. ...
随机推荐
- hive学习01词频统计
词频统计 #创建表,只有一列,列名line create table word_count ( line string) row format delimited fields terminated ...
- NPOI写Excel,Spire.XLS for.NET组件转换Excel为PDF
首先要引用NPOI动态库和Microsoft.Office.Interop.excel.dll (Microsoft.Office.Interop.excel.dll 最好使用使用NuGet下载 , ...
- vue install后出现的问题
出现这个问题你要先把node-sass移除后重新安装 执行下面命令 npm remove node-sass --save-dev 然后安装 npm install node-sass@latest ...
- linux之cp命令(转载)
Linux中使用cp命令复制文件(夹),本文就日常工作中常用的cp命令整理如下. 一.复制一个源文件到目标文件(夹). 命令格式为:cp 源文件 目标文件(夹) 这个是使用频率最多的命令,负责把一个源 ...
- vue-cli3初尝试之路径别名配置
let path = require('path') function resolve(dir) { return path.join(__dirname, dir) } module.exports ...
- WireShark Flow capture analysis
Wiresharkl流量分析 1.图示是对WiFi数据接口的80号端口进行数据捕获,设置混杂模式 过滤表达式设置: IP地址设置过滤 ip.src==191.168.1.102 ip.dst ...
- hiho1460 rmq模板题
好久没做rmq的题了,今天写了一遍,感觉打表有点像区间dp /* 给定长为n的字符串,要求在字符串中选择k个字符, 选择的子系列字典序最小 因为选择k个字符,那么就是去掉n-k个字符 那么[1,n-k ...
- jacoco + eclipse单元测试覆盖率
概念 Jacoco:JaCoCo是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以嵌入到Ant.Maven中:可以作为Eclipse插件,可以使用其JavaAgent技术监控J ...
- 原码、补码、反码的概念和java数的存储方式
原码:用符号位和数值位表示一个带符号数,整数符号->0,负数符号->1,数值一般用二进制形式表示 [+10011]原=00010011 [-10011]原=10010011 反码:正 ...
- Windows Internals 笔记——错误处理
1.Windows函数检测到错误时,会使用一种名为“线程本地存储区”的机制将相应的错误代码与“主调线程”关联到一起.这种机制使得不同的线程能独立运行,不会出现相互干扰对方的错误代码的情况. 2.Get ...