概述
目录
- (一)BigDecimal 加法运算——add()方法
- 1、Int 类型
- 2、double 类型
- 3、String类型
- (二)BigDecimal 减法运算——subtract()方法
- 1、Int 类型
- 2、double 类型
- 3、String类型
- (三)BigDecimal 乘法运算——multiply()方法
- 1、Int 类型
- 2、double 类型
- 3、String类型
- (四)BigDecimal 除法运算——divide()方法
- 1、Int 类型
- 2、double 类型
- 3、String类型
- (五)关于BigDecimal.setScale方法—— 处理小数
- 1、BigDecimal.ROUND_UP 进位处理
- 2、BigDecimal.ROUND_DOWN直接删除多余的小数位
- 3、BigDecimal.ROUND_HALF_UP 四舍五入
- (六)BigDecimal移动小数点的方法
- 1、movePointRight、scaleByPowerOfTen 小数点向右移动两位
- 2、movePointLeft 小数点向左移动两位
- (七)BigDecimal除法后保留两位小数
- 总结
(一)BigDecimal 加法运算——add()方法
1、Int 类型
BigDecimal bigInt1 = new BigDecimal(6);
BigDecimal bigInt2= new BigDecimal(8);
BigDecimal intSum = new BigDecimal(0);
//BigDecimal求和
intSum = bigInt1 .add(bigInt2);
System.out.println("和 :" +intSum);
//打印输出
和 :14
2、double 类型
BigDecimal bigDouble1= new BigDecimal(6.6);
BigDecimal bigDouble2= new BigDecimal(8.8);
BigDecimal doubleSum = new BigDecimal(0);
//BigDecimal求和
doubleSum = bigDouble1.add(bigDouble2);
System.out.println("和:" + doubleSum );
//打印输出
和:15.4000000000000003552713678800500929355621337890625
输出的结果与我们心中所想是不是不太一样?
原因: double不能表示为任何有限长度的二进制小数,所以会出现丢失精度问题。
解决方法: 官方文档中建议使用字符串形式,这样不会丢失精度。
3、String类型
BigDecimal bigString1 = new BigDecimal("6.6");
BigDecimal bigString2 = new BigDecimal("8.8");
BigDecimal stringSum = new BigDecimal(0);
//BigDecimal求和
stringSum= bigString1.add(bigString2);
System.out.println("和 :" +stringSum);
//打印输出
和 :15.4
这样就完美的解决了丢失精度的问题。
(二)BigDecimal 减法运算——subtract()方法
1、Int 类型
BigDecimal bigInt1 = new BigDecimal(8);
BigDecimal bigInt2= new BigDecimal(6);
BigDecimal intDifference = new BigDecimal(0);
//BigDecimal求差
intDifference = bigInt1.subtract(bigInt2);
System.out.println("差 :" +intDifference);
//打印输出
差:2
2、double 类型
BigDecimal bigDouble1= new BigDecimal(8.8);
BigDecimal bigDouble2= new BigDecimal(6.6);
BigDecimal douDifference = new BigDecimal(0);
//BigDecimal求差
douDifference = bigDouble1.subtract(bigDouble2);
System.out.println("差 :" +douDifference );
//打印输出
差 :2.2000000000000010658141036401502788066864013671875
3、String类型
BigDecimal bigString1 = new BigDecimal("8.8");
BigDecimal bigString2= new BigDecimal("6.6");
BigDecimal stringDifference = new BigDecimal(0);
//BigDecimal求差
stringDifference = bigString1.subtract(bigString2);
System.out.println("差 :" +stringDifference );
//打印输出
差 :2.2
(三)BigDecimal 乘法运算——multiply()方法
1、Int 类型
BigDecimal bigInt1 = new BigDecimal(8);
BigDecimal bigInt2= new BigDecimal(6);
BigDecimal intProduct = new BigDecimal(0);
//BigDecimal求积
intProduct= bigInt1.multiply(bigInt2);
System.out.println("积 :" +intProduct);
//打印输出
积:48
2、double 类型
BigDecimal bigDouble1= new BigDecimal(8.8);
BigDecimal bigDouble2= new BigDecimal(6.6);
BigDecimal douProduct = new BigDecimal(0);
//BigDecimal求积
douProduct = bigDouble1.multiply(bigDouble2);
System.out.println("积 :" +douProduct );
//打印输出
积:58.0800000000000015631940186722201564809837179480972682468591095084065045739407651126384735107421875
3、String类型
BigDecimal bigString1= new BigDecimal("8.8");
BigDecimal bigString2= new BigDecimal("6.6");
//BigDecimal求积
BigDecimal strProduct = new BigDecimal(0);
strProduct = bigString1.multiply(bigString2);
System.out.println("积 :" +strProduct);
//打印输出
积 :58.08
(四)BigDecimal 除法运算——divide()方法
1、Int 类型
BigDecimal bigInt1= new BigDecimal(24);
BigDecimal bigInt2= new BigDecimal(3);
BigDecimal intConsult = new BigDecimal(0);
//BigDecimal求商
intConsult = bigInt1.divide(bigInt2);
System.out.println("商 :" +intConsult);
//打印输出
商 :8
2、double 类型
BigDecimal bigDouble1= new BigDecimal(24.6);
BigDecimal bigDouble2= new BigDecimal(2);
BigDecimal douConsult = new BigDecimal(0);
//BigDecimal求商
douConsult = bigDouble1.divide(bigDouble2);
System.out.println("商 :" +douConsult);
//打印输出
商:12.300000000000000710542735760100185871124267578125
3、String类型
BigDecimal bigString1= new BigDecimal("24.6");
BigDecimal bigString2= new BigDecimal("2");
BigDecimal strConsult = new BigDecimal(0);
//BigDecimal求商
strConsult = bigString1.divide(bigString2);
System.out.println("商:" +strConsult);
//打印输出
商:12.3
(五)关于BigDecimal.setScale方法—— 处理小数
1、BigDecimal.ROUND_UP 进位处理
BigDecimal test= new BigDecimal(6.51);
//表示保留一位小数,只要第二位小数不为0都进1
System.out.println(test.setScale(1,BigDecimal.ROUND_UP));
-----------------------------------------
输出:6.6
BigDecimal test= new BigDecimal(6.50);
//表示保留一位小数,只要第二位小数不为0都进1
System.out.println(test.setScale(1,BigDecimal.ROUND_UP));
-----------------------------------------
输出:6.5
2、BigDecimal.ROUND_DOWN直接删除多余的小数位
BigDecimal test= new BigDecimal(6.59);
//直接删除多余的小数位
System.out.println(test.setScale(1,BigDecimal.ROUND_DOWN));
-----------------------------------------
输出:6.5
3、BigDecimal.ROUND_HALF_UP 四舍五入
BigDecimal test= new BigDecimal(6.55);
//四舍五入
System.out.println(test.setScale(1,BigDecimal.ROUND_HALF_UP));
-----------------------------------------
输出:6.6
(六)BigDecimal移动小数点的方法
1、movePointRight、scaleByPowerOfTen 小数点向右移动两位
BigDecimal test= new BigDecimal("88.666");
System.out.println(test.movePointRight(2));
System.out.println(test.scaleByPowerOfTen(2));
-----------------------------------------
输出:
8866.6
8866.6
2、movePointLeft 小数点向左移动两位
BigDecimal test= new BigDecimal("88.666");
System.out.println(test.movePointLeft(2));
-----------------------------------------
输出:0.88666
(七)BigDecimal除法后保留两位小数
BigDecimal bigTest1= new BigDecimal("100");
BigDecimal bigTest2= new BigDecimal("68.688");
System.out.println(bigTest2.divide(bigTest1,2,BigDecimal.ROUND_HALF_UP));
-----------------------------------------
输出:0.69
总结
1、商业计算使用BigDecimal
2、尽量使用参数类型为String的构造函数
3、BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值
文章仅用来作记录分享,以上纯属个人见解,如有不当之处,还望指正。
最近开通个人了微信公众号,以后将会定期分享工作学习过程中遇到的问题,欢迎关注与我一道成长交流~:
微信搜索: MYY668999
或 程序猿爱篮球
即可上车。
最后
以上就是无限手链为你收集整理的BigDecimal运算使用方法(附简单案例)的全部内容,希望文章能够帮你解决BigDecimal运算使用方法(附简单案例)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复