Big Decimal学习笔记

Java中浮点数运算会出现损失精度的问题,且对数的长度也有一定的限制,所以对小数运算和大数运算都不够友好。

在商业计算,例如银行交易中,可以使用BigDecimal类进行运算。

java.math.BigDecimal  BigDecimal (Java Platform SE 8 )

1、对象创建

BigDecimal对象的创建可以分为三类:

①传入BigInteger对象

BigDecimal(BigInteger val)  // 将BigInteger转换为BigDecimal

BigDecimal(BigInteger unscaledVal, int scale)  // 把一个没有小数的BigInteger转变成指定scale小数位数的BigDecimal

BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)  // 按照上面的方法得到BigDecimal,再根据 MathContext 取舍上下文取舍

BigDecimal(BigInteger val, MathContext mc)

②传入字符串

BigDecimal(char[] in)

BigDecimal(char[] in, int offset, int len)  // 字符数组中开始为offset长度为len的部分

BigDecimal(char[] in, int offset, int len, MathContext mc) 

BigDecimal(char[] in, MathContext mc)

③传入基础数据类型

BigDecimal(double val)

BigDecimal(double val, MathContext mc)

BigDecimal(int val)

BigDecimal(int val, MathContext mc)

BigDecimal(long val)

BigDecimal(long val, MathContext mc)

④传入String类型

BigDecimal(String val)

BigDecimal(String val, MathContext mc)

不推荐传入浮点数double创建对象,因为在传递过程中会出现精度损失。可以传入String类型或整数类型。

2、基本方法

add(BigDecimal augend) // 返回值为this + augend的BigDecimal对象

divide(BigDecimal divisor) // 返回值为this / divisor的BigDecimal对象

multiply(BigDecimal multiplicand) // 返回值为this × multiplicand的BigDecimal对象

subtract(BigDecimal subtrahend) // 返回值为this - subtrahend的BigDecimal对象

toString() // 将BigDecimal对象的数值转换成字符串

doubleValue() // 将BigDecimal对象中的值以双精度数返回

floatValue() // 将BigDecimal对象中的值以单精度数返回

longValue() // 将BigDecimal对象中的值以长整数返回

intValue() // 将BigDecimal对象中的值以整数返回

其中,进行除法运算时,divide(BigDecimal)如果不能整除会报错java.lang.ArithmeticException,为了避免这个错误,要多传两个参数来规定小数的舍入位数和舍入模式。

divide(BigDecimal divisor, int scale, int roundingMode)

舍入模式包括以下几种:

ROUND_CEILING    //向正无穷方向舍入
ROUND_DOWN    //向零方向舍入
ROUND_FLOOR    //向负无穷方向舍入
ROUND_HALF_DOWN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
ROUND_HALF_UP    //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6,也就是我们常说的“四舍五入”
ROUND_UNNECESSARY    //计算结果是精确的,不需要舍入模式
ROUND_UP    //向远离0的方向舍入

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值