BigDecimal使用

绝对值:
BigDecimal absNum = num.abs();

(一)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
1
2
3
4
5
6
7
8
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
1
2
3
4
5
6
7
8
输出的结果与我们心中所想是不是不太一样?

原因: 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
1
2
3
4
5
6
7
8
这样就完美的解决了丢失精度的问题。

(二)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
1
2
3
4
5
6
7
8
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
1
2
3
4
5
6
7
8
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
1
2
3
4
5
6
7
8
(三)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
1
2
3
4
5
6
7
8
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
1
2
3
4
5
6
7
8
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
1
2
3
4
5
6
7
8
(四)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
1
2
3
4
5
6
7
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
1
2
3
4
5
6
7
8
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
1
2
3
4
5
6
7
8
(五)关于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

1
2
3
4
5
6
7
8
9
10
11
2、BigDecimal.ROUND_DOWN直接删除多余的小数位
BigDecimal test= new BigDecimal(6.59);
//直接删除多余的小数位
System.out.println(test.setScale(1,BigDecimal.ROUND_DOWN));
-----------------------------------------
输出:6.5
1
2
3
4
5
3、BigDecimal.ROUND_HALF_UP 四舍五入
BigDecimal test= new BigDecimal(6.55);
//四舍五入
System.out.println(test.setScale(1,BigDecimal.ROUND_HALF_UP));
-----------------------------------------
输出:6.6
1
2
3
4
5
(六)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
1
2
3
4
5
6
7
2、movePointLeft 小数点向左移动两位
BigDecimal test= new BigDecimal(“88.666”);
System.out.println(test.movePointLeft(2));
-----------------------------------------
输出:0.88666
1
2
3
4
(七)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
2
3
4
5
总结
1、商业计算使用BigDecimal

2、尽量使用参数类型为String的构造函数

3、BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值

转换为字符串

toEngineeringString:有必要时使用工程计数法。工程记数法是一种工程计算中经常使用的记录数字的方法,与科学计数法类似,但要求10的幂必须是3的倍数

toPlainString:不使用任何指数(永不使用科学计数法)

toString:有必要时使用科学计数法

import java.math.BigDecimal;
 
public class Test {
 
    public static void main(String[] args) {
        BigDecimal number = new BigDecimal("1E11");
        System.out.println(number.toEngineeringString());
        System.out.println(number.toPlainString());
        System.out.println(number.toString());
    }
}
 
 
输出:
100E+9
100000000000
1E+11
  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值