java基础-BigDecimal类常用方法介绍
java基础-BigDecimal类常用方法介绍
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.BigDecimal类概述
我们知道浮点数的计算结果是未知的。原因是计算机二进制中,表示浮点数不精确造成的。这个时候你需要一个超级大型的浮点数据,并且提供高精度的浮点运算,也就是我们要说的BigDecimal。
不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString()
方法提供 BigDecimal 的规范表示形式。
BigDecimal 类使用户能完全控制舍入行为。如果未指定舍入模式,并且无法表示准确结果,则抛出一个异常;否则,通过向该操作提供适当的 MathContext
对象,可以对已选择的精度和舍入模式执行计算。在任何情况下,可以为舍入控制提供八种舍入模式。使用此类(例如,ROUND_HALF_UP
)中的整数字段来表示舍入模式已过时;应改为使用 RoundingMode enum(例如,RoundingMode.HALF_UP
)的枚举值。
二.BigDecimal类实现加法,减法和乘法的案例展示
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.demo; import java.math.BigDecimal; public class BigDecimalDemo {
public static void main(String[] args) {
function();
} public static void function() {
BigDecimal a = new BigDecimal("0.009");
BigDecimal b = new BigDecimal("0.001");
//计算a+b的和,调用add方法
BigDecimal sum = a.add(b);
System.out.println(sum); BigDecimal x = new BigDecimal("1.1");
BigDecimal y = new BigDecimal("0.28");
BigDecimal sub = x.subtract(y);
System.out.println(sub); BigDecimal m = new BigDecimal("3.14");
BigDecimal n = new BigDecimal("100");
BigDecimal mul = m.multiply(n);
System.out.println(mul);
}
} /*
以上代码执行结果如下:
0.010
0.82
314.00
*/
三.BIgDecimal类实现除法
/*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/ package cn.org.yinzhengjie.demo; import java.math.BigDecimal; public class BigDecimalDemo {
public static void main(String[] args) {
function();
} public static void function() {
BigDecimal a = new BigDecimal("9.8");
BigDecimal b = new BigDecimal("3");
//计算a/b的商,调用divied方法,
// BigDecimal div = a.divide(b); //如果除不尽的话会抛出异常:java.lang.ArithmeticException。
// BigDecimal div = a.divide(b,3,BigDecimal.ROUND_UP); //保留三位小数,向上加1
// BigDecimal div = a.divide(b,3,BigDecimal.ROUND_DOWN); //保留三位小数,直接舍去
// BigDecimal div = a.divide(b,3,BigDecimal.ROUND_HALF_UP); //保留三位小数,当ROUND_HALF_UP>=0.5时,和ROUND_UP功能相同(即向上加1)。
BigDecimal div = a.divide(b,3,BigDecimal.ROUND_HALF_DOWN); //保留三位小数,如果舍弃部分>0.5时,则舍入行为与ROUN_UP相同(向上加1),否则舍入行为与ROUND_DOWN相同。
System.out.println(div);
}
} /*
以上代码执行结果如下:
3.267
*/
java基础-BigDecimal类常用方法介绍的更多相关文章
- java基础-BigInteger类常用方法介绍
java基础-BigInteger类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.BigInteger类概述 Java中long型为最大整数类型,对于超过long ...
- java基础-Arrays类常用方法介绍
java基础-Arrays类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Array类的概念 此类包含用来操作数组(比如排序和搜索)的各种方法.需要注意,如果指定 ...
- java基础-Math类常用方法介绍
java基础-Math类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Math类概念 Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函 ...
- java基础-System类常用方法介绍
java基础-System类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.System类概念 在API中system类介绍的比较简单,我们给出定义,system中 ...
- java基础-Integer类常用方法介绍
java基础-Integer类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需 ...
- Java基础-Calendar类常用方法介绍
Java基础-Calendar类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Calendar类概念 Calendar 类是一个抽象类,它为特定瞬间与一组诸如 Y ...
- Java基础-Date类常用方法介绍
Java基础-Date类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.毫秒值概念 我们在查阅Date类的API文档时,会发现这样的一句话:"The cl ...
- Java中BigDecimal类介绍及用法
Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算. 其中 BigInteger 类是 ...
- Java中BigDecimal类的常用方法
1.简介 BigDecimal类位于java.math.BigDecimal包下.使用此类可以完成大的小数操作,而且也可以使用此类进行精确的四舍五入,这一点在开发中经常使用. 对于不需要任何准确计算精 ...
随机推荐
- 2-Second Scrum Meeting-20151202
任务安排 闫昊: 今日完成:设计学习进度的管理. 明日任务:请假.(编译+计组,压力有点大) 金哉仁: 今日完成:继续商讨APP相关界面与设计,安装AndroidStudio. 明日任务:请假.(编译 ...
- 结对编程-->总结报告
项目github地址 PSP时间表格 结对编程中关于Information Hiding, Interface Design, Loose Coupling原则的使用 Information Hidi ...
- 关于mybatis的思考(2)——mybatis映射文件的深入理解
1.配置文件 mybatis进行持久化操作是以SqlSessionFactory对象为基础的,这个对象是整个数据库映射关系经过编译后的内存镜像. InputStream inputStream = R ...
- express框架结合ejs模板引擎使用
我们在项目里建立一个views文件夹(必须),如果你不想使用views文件夹的话需要调用app.set("views","自定义文件夹名"),然后在里面建立一个 ...
- [转帖 cnblog 的news ]技术实力超群的Netflix,为何没有CTO
技术实力超群的Netflix,为何没有CTO https://news.cnblogs.com/n/581824/ 投递人 itwriter 发布于 2017-11-05 16:12 评论(2) 有1 ...
- 刷新dbgrid 而不失去当前行位置
我们有一个Delphi的数据库应用程序,上面有个DBGrid和一个数据集: DBGrid是用来显示来自数据集(查询或表)的数据,根据设计,当您调用已经打开的数据集的Refresh方 法(例如使用DBN ...
- Codeforces 1060 F. Shrinking Tree
题目链接 一道思维好题啊...感觉这种类型的题很检验基本功是否扎实(像我这样的就挂了). 题意:你有一棵\(n\)个点的树,每次随机选择一条边,将这条边的两个端点合并,并随机继承两个点标号中的一个,问 ...
- 【大数据】MapTask并行度和切片机制
一. MapTask并行度决定机制 maptask的并行度决定map阶段的任务处理并发度,进而影响到整个job的处理速度 那么,mapTask并行实例是否越多越好呢?其并行度又是如何决定呢? 1.1 ...
- mysql测试索引在表中的作用
//未完成 参考书:(完成对缓存中执行计划的查看对比 P133~) Microsoft SQL Server 2008技术内幕:T-SQL查询 实验内容 单表中的索引使用 1.建表 create ta ...
- Day24-图片验证码----待续
一,上课所讲---------没听懂!!! 1,首先,图片验证码不能放到客户浏览器的cookie上,否则,客户可以直接从它的浏览器上拿到,然后自动提交,这样的话,验证码就没有任何用处了.所以图片验证码 ...