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. ...
随机推荐
- Sybase·调用存储过程并返回结果
最近项目要用Sybase数据库实现分页,第一次使用Sybase数据库,也是第一次使用他的存储过程.2个多小时才调用成功,在此记录: 项目架构:SSM 1.Sybase本身不支持分页操作,需要写存储过程 ...
- vue-fetch
1.安装命令“ cnpm install --save isomorphic-fetch es6-promise 2.由于ie不支持Promise,所以需要安装promise-polyfill; cn ...
- ssd.pytorch
https://towardsdatascience.com/learning-note-single-shot-multibox-detector-with-pytorch-part-1-38185 ...
- nginx(一)之默认配置文件
首先是nginx.conf vim /etc/nginx/nginx.conf user nginx; // 设置nginx服务的系统使用用户 worker_processes 1; // 工作进程数 ...
- css 选择器/table属性/type 属性
css style样式---要写单位px style=" width: 200px; height :300px;" ;是结束符
- ionic在ios侧滑页面空白 禁用视图滑动后退
本人在ios10左右滑动的时候,经常出现左滑页面后退,然后整个页面空白现象,只能强行退出,并重新登录,最简单的方法就是禁用侧滑后退这个功能: 在app.js上config增加如下: $ionicCon ...
- PHP中json_encode()使用须知,JSON数组和JSON对象
⊰ 偷偷的告诉你,这是一个很不谨慎就会踩得坑 ⊱ 如下代码 (看了一下很简单,没毛病啊,老铁) $arr = array( '0'=>'a','1'=>'b','2'=>'c',' ...
- Python基础知识之大杂烩
一.range 和 xrange 的区别 xrange 与 range 基本上都是在循环的时候用,两者的用法完全相同.所不同的是xrange生成的是一个生成器,而range生成的是一个list对象. ...
- Burp Scanner Report
1.使用application web 漏洞平台,除此之外还有一款类似的工具 叫做mulidata,其实mulidata功能更好一点. 2.配置之前的问题处理 安装之前要确认 自己之前是否安装过 Ap ...
- Axure-----三级下拉菜单的具体实现过程
********三级下拉菜单的动画效果:********** 1.选中三级菜单将其转换为动态面板,命名为treePanel,并隐藏. 2.选中二级菜单添加交互效果:[切换可见性],勾选treePane ...