浅析java中BigDecimal大数值类的使用

      BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成。如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以 10 的负 scale 次幂。因此,BigDecimal 表示的数值是 (unscaledValue × 10-scale)。可以处理任意长度的浮点数运算。

      BigDecimal的实现利用到了BigInteger, 所不同的是BigDecimal加入了小数位的概念,比如BigDecimal d = new BigDecimal(new BigInteger(num),5);5表示的是5个小数位。BigDecimal可以用来做超大的浮点数的运算,比如+-*/的运算,其中除法运算是最复杂的,因为商的位数还有除不断的情况下末位小数点的处理都是需要考虑的。


具体使用

      计算:

      加: a.add(b);

      减: a.subtract(b);

      乘: a.multiply(b);

      除: a.divide(b,2);//2为精度取值

下面我们来看看除法的详细说明: divide(BigDecimal divisor, int scale, int roundingMode)

BigDecimal的setScale方法

BigDecimal.setScale()

方法用于格式化小数点

表示保留一位小数,默认用四舍五入方式

setScale(1)

直接删除多余的小数位,如2.35会变成2.3 setScale(1,BigDecimal.ROUND_DOWN)

进位处理,2.35变成2.4 setScale(1,BigDecimal.ROUND_UP)

四舍五入,2.35变成2.4 setScale(1,BigDecimal.ROUND_HALF_UP)

四舍五入,2.35变成2.3,如果是5则向下舍setScaler(1,BigDecimal.ROUND_HALF_DOWN)

更多模式请查询API


注意点一

scale指的是你小数点后的位数。 scale()就是BigDecimal类中的方法。如 BigDecimal b = new BigDecimal("123.456"); b.scale()返回的就是3

注意点二

roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段, 有很多种,如 BigDecimal.ROUND_HALF_UP表示的就是4舍5入

JavaBigDecimal提供了一种方法来比较两个BigDecimal对象的大小。我们可以使用compareTo()方法来比较BigDecimal对象的大小。该方法返回一个整数值,该值表示当前对象与指定对象之间的大小关系。具体而言,如果当前对象小于指定对象,则返回负整数;如果当前对象等于指定对象,则返回0;如果当前对象大于指定对象,则返回正整数。 以下是一个示例代码,展示了如何使用compareTo()方法来比较BigDecimal对象的大小: ``` import java.math.BigDecimal; public class BigDecimalComparisonExample { public static void main(String[] args) { BigDecimal num1 = new BigDecimal("10.5"); BigDecimal num2 = new BigDecimal("20.5"); BigDecimal num3 = new BigDecimal("10.5"); //比较num1和num2 int result1 = num1.compareTo(num2); System.out.println("num1与num2的比较结果为:" + result1); //比较num1和num3 int result2 = num1.compareTo(num3); System.out.println("num1与num3的比较结果为:" + result2); //比较num2和num3 int result3 = num2.compareTo(num3); System.out.println("num2与num3的比较结果为:" + result3); } } ``` 运行以上代码,输出结果如下: ``` num1与num2的比较结果为:-1 num1与num3的比较结果为:0 num2与num3的比较结果为:1 ``` 以上代码,我们创建了三个BigDecimal对象:num1、num2和num3。然后,我们使用compareTo()方法来比较它们之间的大小关系,并输出比较结果。根据输出结果可以看出,num1小于num2,num1等于num3,num2大于num3。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值