BigDecimal数据类型(初始化,加减乘除,基本操作)

本文详细介绍BigDecimal数据类型的使用方法,包括初始化、基本运算如加减乘除,并解释了如何避免精度损失,以及提供了取最大值、最小值、绝对值和相反数等实用技巧。

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

BigDecimal为大数据类型,更精准的计算

1.初始化

1.1 字符串做参数
BigDecimal a =new BigDecimal(“1.22”);
doublevalue:1.2199999999999999733546474089962430298328399658203125
1.2 数字做参数
BigDecimal a =new BigDecimal(1.22);
construct with a String value: 1.22
注意1:String 构造方法是完全可预知的:写入 newBigDecimal(“0.1”) 将创建一个 BigDecimal,它正好等于预期的 0.1。因此,比较而言,通常建议优先使用String构造方法。

注意2:当double必须用作BigDecimal的源时,请注意,此构造方法提供了一个准确转换;它不提供与以下操作相同的结果:先使用Double.toString(double)方法,然后使用BigDecimal(String)构造方法,将double转换为String。要获取该结果,请使用static valueOf(double)方法

2.加减乘除操作

2.1加法运算
a.add(b)

 BigDecimal a =new BigDecimal("1.22");
 BigDecimal b =new BigDecimal("2.22");
 a=a.add(b);
 System.out.println("aplus b is : " + a);

2.2减法运算
a.sub(b)

 BigDecimal a =new BigDecimal("13.22");
 BigDecimal b =new BigDecimal("2.22");
 a=a.sub(b);
 System.out.println(a);

2.3乘法运算
a.multiply(b)

 BigDecimal a =new BigDecimal("13.22");
 BigDecimal b =new BigDecimal("2.22");
 a=a.multiply(b);
 System.out.println(a);

2.4除法运算
a=a.divide(b,2)
a=a.divide(b,2,BigDecimal.’BigDecimal.舍入方式’)
2为保留小数点位数
BigDecimal.ROUND_HALF_EVEN为小数舍入方式,默认四舍五入

 BigDecimal a =new BigDecimal("13.22");
 BigDecimal b =new BigDecimal("2.22");
 a=a.divide(b,2);
 System.out.println(a);

通过BigDecimal的divide方法进行除法时当不整除,出现无限循环小数时,就会抛异常 解决方法:给divide方法设置精度及保留几位小数

舍入方式

BigDecimal枚举常量用法摘要 :
CEILING
向正无限大方向舍入的舍入模式。
DOWN
向零方向舍入的舍入模式。
FLOOR
向负无限大方向舍入的舍入模式。
HALF_DOWN
向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向下舍入。
HALF_EVEN
向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
HALF_UP
向最接近数字方向舍入的舍入模式,如果与两个相邻数字的距离相等,则向上舍入。
UNNECESSARY
用于断言请求的操作具有精确结果的舍入模式,因此不需要舍入。
UP
远离零方向舍入的舍入模式。

3.取最大值,最小值,绝对值,相反数

3.1 a.max (b) //比较取最大值

3.2 a.min(b) //比较取最小值

3.3 a.abs()//取最绝对值

3.4 a.negate()//取相反数

### Java 中 BigDecimal加减乘除运算 在 Java 中,`BigDecimal` 是一种用于高精度计算的数据类型。由于浮点数存在精度损失的问题,在处理金融数据或其他需要精确数值的应用场景时,通常会使用 `BigDecimal` 来替代基本数据类型。 以下是关于 `BigDecimal` 类型的加法、减法、乘法和除法的具体实现方式: #### 1. 加法操作 通过调用 `add()` 方法来完成加法运算。该方法接收另一个 `BigDecimal` 对象作为参数并返回一个新的 `BigDecimal` 实例表示两者之和。 ```java import java.math.BigDecimal; public class BigDecimalExample { public static void main(String[] args) { BigDecimal num1 = new BigDecimal("10.5"); BigDecimal num2 = new BigDecimal("20.7"); // 使用 add() 方法进行加法运算 BigDecimal sum = num1.add(num2); System.out.println("加法结果: " + sum.toString()); } } ``` 上述代码展示了如何利用 `add()` 函数执行两个 `BigDecimal` 值之间的相加过程[^1]。 #### 2. 减法操作 为了实施减法逻辑,则需依赖于 `subtract()` 方法。此函数同样接受一个 `BigDecimal` 参数,并给出两者的差值作为一个新的对象实例呈现出来。 ```java // 继续上面的例子... BigDecimal difference = num1.subtract(num2); System.out.println("减法结果: " + difference.toString()); ``` 这里说明了怎样运用 subtract() 完成从第一个数字里扣除第二个的操作[^2]。 #### 3. 乘法操作 当涉及到多个数量级或者非常大的整数之间相互作用的时候,应该考虑采用 multiply() 方式来进行准确无误的产品获取工作流程设计思路下的具体表现形式之一就是下面这个例子所描述的内容。 ```java // 同样基于之前的定义继续下去的话... BigDecimal product = num1.multiply(num2); System.out.println("乘法结果: " + product.toString()); ``` 这段脚本解释了multiply() 如何帮助我们得到两个大十进制数相乘后的最终产物。 #### 4. 除法操作 对于除法规则而言,它稍微复杂一点因为有可能遇到无法完全整除的情况因此还需要额外指定舍入模式比如ROUND_HALF_UP代表四舍五入向上取最近邻近值如果正好处于中间位置就朝远离零的方向调整等等其他选项也可以依据实际需求自行设定好之后再传给divide() 方法即可正常运作起来啦! 下面给出了一个简单的示范版本供参考学习使用哦~ ```java try{ // 设置 scale 和 RoundingMode int scale = 2; BigDecimal quotient = num1.divide(num2, scale, BigDecimal.ROUND_HALF_UP); System.out.println("除法结果: " + quotient.toString()); }catch(ArithmeticException e){ System.err.println("发生异常:" +e.getMessage()); } ``` 注意此处特别强调要考虑到可能出现被零除错误的情形所以最好加上 try-catch 结构以便妥善处理任何意外状况的发生同时还能保持程序稳定运行不受影响^。 另外值得注意的是创建 BigDecimal 实例时候尽量避免直接传递 double 或 float 类型变量而是改用字符串形式初始化这样能够有效防止因二进制转换而导致的小数位误差问题出现从而进一步提升整体系统的可靠性和准确性程度[^4]^。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值