生命不息
作死不止,探索人生无限可能!

BigDecimal的加减乘除计算_BigDecimal加减乘除运算保留两位小数

今天遇到一个bigdecimal的加减乘除数值运算,需要保留两位小数。哈哈,一执行,发现跟预期的不一样,结果是3.16。原来,String.format()方法会对格式化的数进行四舍五入,但是如果不需要四舍五入怎么办?答案是使用BigDecimal进行运算。我是这样写的:

BigDecimal是Java中的一个类,用于进行高精度的浮点数运算。它提供了比float和double更精确的算术运算,并且可以控制舍入模式。BigDecimal特别适用于金融和其他需要高精度计算的领域主要特点:高精度:BigDecimal可以表示任意精度的浮点数,不会像float和double那样出现精度损失。可控的舍入模式:可以通过RoundingMode枚举来控制舍入行为。不可变性:BigDecimal对象是不可变的,这意味着所有操作都会返回新的BigDecimal实例,而不会修改原始对象。丰富的操作方法:提供了加、减、乘、除等多种数学运算方法。

使用BigDecimal进行加减乘除运算

加法
BigDecimal a = new BigDecimal(“1”);
BigDecimal b = new BigDecimal(“3”);
System.out.println(a.add(b));

减法
BigDecimal a = new BigDecimal(“1”);
BigDecimal b = new BigDecimal(“3”);
System.out.println(a.subtract(b));

乘法
BigDecimal a = new BigDecimal(“2”);
BigDecimal b = new BigDecimal(“3”);
System.out.println(a.multiply(b));

除法
BigDecimal a = new BigDecimal(“2”);
BigDecimal b = new BigDecimal(“3”);
System.out.println(a.divide(b, 2, RoundingMode.HALF_UP));

由于除法的结果可能会有小数,所以需要对除法的结果进行精度控制并选取舍入模式。RoundingMode是java.math.BigDecimal类中的一个枚举类型,用于指定在进行舍入操作时采用的舍入模式。以下是一些常见的RoundingMode值及其含义:

UP:远离零方向舍入。总是增加数值的绝对值。DOWN:向零方向舍入。总是减少数值的绝对值。CEILING:向正无穷方向舍入。FLOOR:向负无穷方向舍入。HALF_UP:四舍五入,这是最常见的舍入模式。HALF_DOWN:五舍六入。HALF_EVEN:银行家舍入法,也称为“四舍六入五成双”。UNNECESSARY:表示不需要舍入,如果需要舍入则抛出ArithmeticException。

总结:商业计算使用BigDecimal。尽量使用参数类型为String的构造函数。BigDecimal都是不可变的(immutable)的,在进行每一步运算时,都会产生一个新的对象,所以在做加减乘除运算时千万要保存操作后的值。

文章链接https://yezileyuan.com/75180.html
版权声明:文章由本站原创或网友分享,禁止转载!发布此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请与我们(A080210@qq.com)联系,我们将及时更正、删除,谢谢。
温馨提示本站信息来自互联网或网友分享,请大家查阅时,谨慎选择、自辩真伪,自负责任。

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...