BigDecimal简介

一、BigDecimal概述
BigDecimal是Java常用的API之一,位于java.math.BigDecimal包下,常用于需要精确计算数据的场景中,例如涉及到订单金额和银行账务数据等场景。

二、BigDecimal优缺点
相比较于单精度浮点型变量float和双精度浮点型变量double,BigDecimal有如下优点

优点:单精度浮点型变量float可以处理7位有效数,双精度浮点型变量double可以处理16位有效数,BigDecimal可以处理任意大小且精度完全准确的浮点数。

缺点:BigDecimal的性能比double和float差,在处理庞大,复杂的运算时尤为明显。

三、常用方法

3.1.1、BigDecimal(int)
创建一个具有参数所指定整数值的对象

3.1.2、BigDecimal(long)
创建一个具有参数所指定长整数值的对象

3.1.3、BigDecimal(String)
创建一个具有参数所指定以字符串表示的数值的对象

3.1.4、BigDecimal(double)
创建一个具有参数所指定双精度值的对象,不推荐使用

BigDecimal first = new BigDecimal("0.12");
BigDecimal second = new BigDecimal(0.12);

System.out.println("first is:" + first);
System.out.println("second is:" + second);
first is:0.12
second is:0.11999999999999999555910790149937383830547332763671875

四、其他常用方法

实例:

import java.math.BigDecimal;

public class LearnBigDecimal {
    public static void main(String[] args) {
        // BigDecimal的构造方法
        BigDecimal first = new BigDecimal("123.345");
        BigDecimal second = new BigDecimal("0.120");
        System.out.println("first:" + first);
        System.out.println("second:" + second);

        // scale():获取BigDecimal对象小数点后位数,返回值为负数表示这个数是个整数
        System.out.println("first小数点后位数:" + first.scale());
        System.out.println("second小数点后位数:" + second.scale());

        // 将second格式化为一个相等的,但去掉了末尾0的BigDecimal对象third
        BigDecimal third = second.stripTrailingZeros();
        System.out.println("third:" + third);

        // 加、减、乘
        System.out.println("first + second = " + first.add(second));
        System.out.println("first - second = " + first.subtract(second));
        System.out.println("first * second = " + first.multiply(second));

        // 除法存在无法除尽的情况,需要指定精度以及如何进行截断,否则抛异常:ArithmeticException
        BigDecimal divideValue = first.divide(second, 10, BigDecimal.ROUND_HALF_UP);
        System.out.println("first / second = " + divideValue);

        // 模运算
        BigDecimal remainderValue = first.remainder(second);
        System.out.println("first % second = " + remainderValue);

        // 四舍五入 0表示小数点后位数为0
        BigDecimal value1 = first.setScale(0, BigDecimal.ROUND_HALF_UP);
        System.out.println("first四舍五入后值为:" + value1);

        // 直接截断 2表示小数点后位数为2
        BigDecimal value2 = first.setScale(2, BigDecimal.ROUND_HALF_DOWN);
        System.out.println("first直接截断后值为:" + value2);

        // 使用compareTo()比较BigDecimal对象值的大小
        if (first.compareTo(second) > 0) {
            System.out.println("first > second");
        } else if (first.compareTo(second) == 0) {
            System.out.println("first = second");
        } else {
            System.out.println("first < second");
        }
    }
}
first:123.345
second:0.120
first小数点后位数:3
second小数点后位数:3
third:0.12
first + second = 123.465
first - second = 123.225
first * second = 14.801400
first / second = 1027.8750000000
first % second = 0.105
first四舍五入后值为:123
first直接截断后值为:123.34
first > second

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

几两春秋梦_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值