Decimal学习

文章讲述了Java中由于浮点数精度问题,如何使用BigDecimal类提供更高精度,包括创建方式、求和操作以及控制Decimal对象精度的方法,如setScale()和不同的舍入模式。
摘要由CSDN通过智能技术生成

精度问题

由于二进制浮点数表示法的限制,浮点数可能无法精确表示某些小数。这可能导致精度丢失问题。如果需要更高的精度,可以使用 BigDecimal 类。例如:

import java.math.BigDecimal;
BigDecimal num2 = new BigDecimal("3.14159265359");

BigDecimal 允许你精确地控制小数的精度,但它的运算和比较操作可能会比普通的浮点数类型更复杂。

使用

Decimal对象创建

方式一:
BigDecimal bigDecimal = BigDecimal.valueOf(2.233348);
方式二:
BigDecimal num2 = new BigDecimal("3.14159265359");

对Decimal对象进行求和

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class BigDecimalSumExample {
    public static void main(String[] args) {
        // 创建一个包含 BigDecimal 元素的列表
        List<BigDecimal> numbers = new ArrayList<>();
        numbers.add(new BigDecimal("10.5"));
        numbers.add(new BigDecimal("20.2"));
        numbers.add(new BigDecimal("15.8"));

        // 初始化一个 BigDecimal 用于存放求和结果
        BigDecimal sum = BigDecimal.ZERO;

        // 遍历列表并累加元素到求和结果
        for (BigDecimal number : numbers) {
            sum = sum.add(number);
        }

        // 打印求和结果
        System.out.println("Sum: " + sum);
    }
}

在对Decimal数字进行求和时,使用的是Decimal对象的add()方法,例如上面代码中的for循环中代码。

控制Decimal对象精度

Decimal类有一个方法setScale(),是用来对Decimal对象设置精度的。使用方式如下

    public static void main(String[] args) {
        BigDecimal bigDecimal = BigDecimal.valueOf(2.233348);
        System.out.println("bigDecimal = " + bigDecimal);
        //小数点后保留3位,舍取方式为四舍五入(RoundingMode.HALF_UP)
        //setScale有三个重载方法,具体请看官方api
        //取舍方式有多重,具体请看官方api
        BigDecimal bigDecimal1 = bigDecimal.setScale(3, RoundingMode.HALF_UP);
        System.out.println("bigDecimal = " + bigDecimal);
        System.out.println("bigDecimal1 = " + bigDecimal1);
    }

运行结果:

bigDecimal = 2.233348
bigDecimal = 2.233348 //原对象没有被改变
bigDecimal1 = 2.233 //setScale返回的对象

Process finished with exit code 0

由上面的运行结果可以看出,当使用一个数字进行创建Decimal时,他并不会对这个数字做出精度的取舍,创建的时候用什么就是什么。
还有,在调用setDecimal方法后会返回一个Decimal对象,这个对象就是精度处理后的decimal对象,原有对象并不会被改变,这一点需要注意。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值