JAVA基础——BigDecimal基本用法

本文介绍了Java中BigDecimal的创建、加减乘除运算、大小比较以及如何保留小数的方法。通过示例展示了compareTo方法的使用,并详细解释了setScale方法的不同舍入模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


我们都知道,float和double在计算过程中会存在误差,如何避免使用浮点数失去精度?这里可以使用Java的Java.math包中提供的API类——BigDecimal。
BigDecimal是一个类,BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。

如何创建BigDecimal对象

创建BigDecimal有以下两种方式:

import java.math.BigDecimal;//先导入java.math包
	BigDecimal bigDecimal1 = new BigDecimal("1.234567");//要带双引号,里面的参数是字符串类型,不带双引号会损失精度。
	BigDecimal bigDecimal2 = BigDecimal.valueOf(1.234567);//参数为double,不必带双引号。

除了上述的两种方式以外,对于特殊的0,1,10,还可以用一下方式创建:

        BigDecimal bigDecimal3 = BigDecimal.ZERO;//0
        BigDecimal bigDecimal4 = BigDecimal.ONE;//1
        BigDecimal bigDecimal5 = BigDecimal.TEN;//10

加减乘除运算

public BigDecimal add(BigDecimal value);//加法
public BigDecimal subtract(BigDecimal value);//减法 
public BigDecimal multiply(BigDecimal value);//乘法
public BigDecimal divide(BigDecimal value);//除法

加减乘除BigDecimal的加减乘除进行运算以后都是返回了一个新的BigDecimal而不是在原有的对象上增加。
以加法为例(其它运算方法和加法相同)

public class Test {
    public static void main(String[] args) {
        BigDecimal b1 = new BigDecimal("1.5");//b1=1.5
        BigDecimal b2 = new BigDecimal("2.5");//b2=2.5
        BigDecimal b3 = b1.add(b2);//b3=2.5+1.5=4.0
        System.out.println("b1 = " + b1)//b1的值并没有发生改变,是返回了一个新的BigDecimal而不是在原有的对象上增加。
        System.out.println("b3 = " + b3);
    }
}

输出结果:
输出结果

BigDecimal比较大小

BigDecimal使用compareTo来比较大小
根据此方法,值相等但具有不同标度的两个BigDecimal对象(如,5.0 和 5.00和5.0000)被认为是相等的。
compareTo的返回值不是boolean类型,而是int类型0,1,-1。
-1表示小于,0表示相等,1表示大于。
如:

public class Test {
    public static void main(String[] args) {
    BigDecimal b1 = new BigDecimal("5.0");
    BigDecimal b2 = new BigDecimal("1.0");
    BigDecimal b3 = new BigDecimal("5.000");
    int a = b1.compareTo(b2);//5.0大于1.0,a=1
    int b = b2.compareTo(b3);//1.0小于5.000,b=-1
    int c = b1.compareTo(b3);//5.0和5.000虽然标度不同但是值相等,c=0
    System.out.println("a="+a);
    System.out.println("b="+b);
    System.out.println("c="+c);
    }
}

输出结果:
输出结果

BigDecimal保留小数

BigDecimal中的setScale方法用来格式化小数。
setScale中的参数定义:
ROUND_CEILING
Rounding mode to round towards positive infinity.
向正无穷方向舍入

ROUND_DOWN
Rounding mode to round towards zero.
向零方向舍入

ROUND_FLOOR
Rounding mode to round towards negative infinity.
向负无穷方向舍入

ROUND_HALF_DOWN
Rounding mode to round towards “nearest neighbor” unless both neighbors are equidistant, in which case round down.
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5

ROUND_HALF_EVEN
Rounding mode to round towards the “nearest neighbor” unless both neighbors are equidistant, in which case, round towards the even neighbor.
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP ,如果是偶数,使用ROUND_HALF_DOWN

ROUND_HALF_UP
Rounding mode to round towards “nearest neighbor” unless both neighbors are equidistant, in which case round up.
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6

ROUND_UNNECESSARY
Rounding mode to assert that the requested operation has an exact result, hence no rounding is necessary.
计算结果是精确的,不需要舍入模式

ROUND_UP
Rounding mode to round away from zero.
向远离0的方向舍入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHB爱Study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值