java之BigDecimal 介绍

本文详细介绍了Java中的BigDecimal类,包括如何创建BigDecimal对象、进行精确的算术运算(加、减、乘、除),以及如何处理除法中的无限循环小数问题。此外还探讨了BigDecimal类的一些其他实用方法。

概述:
   BigDecimal 是Java在java.math包中提供的API类,主要是用于金钱等要求高精度数值的计算。
  
 
1.转换为BigDecimal 类型

构造方法: BigDecimal bigDecimal = new BigDecimal (参数);

作用:会将括号内的值的类型转换为BigDecimal 类型

括号里面的值可以填以下图片里的类型
在这里插入图片描述
  
   
BigDecimal bigDecimal = BigDecimal.valueOf();

也能得到BigDecimal 类型的值,但是很明显,这个方法所能接受的参数的类型不如BigDecimal的构造方式的多
在这里插入图片描述

 
    

2.BigDecimal 的加减乘除

BigDecimal bigDecimal = new BigDecimal(3);

加法 :bigDecimal.add(BigDecimal )

减法:bigDecimal.subtract(BigDecimal )

乘法:bigDecimal.multiply(BigDecimal )

除法:bigDecimal.divide(BigDecimal )
  
以上括号内的参数都要是BigDecimal 的类型,并且方法的返回值都是Bigdecimal 类型。

注意:BigDecimal 的除法如果是不能整除出现了无限循环小数的时候,会报一个java.lang.ArithmeticException 异常
在这里插入图片描述
所以一般在做BigDecimal 除法的时候都会设置对应的小数位数和小数取舍规则,比如说:
  
  bigDecimal.divide(BigDecimal,2,BigDecimal.ROUND_HALF_UP)
  
其中的数字2表示的是保留2位小数,BigDecimal.ROUND_HALF_UP 表示的是四舍五入。

 
一般还有以下规则,以1/3为例。

BigDecimal.ROUND_UP
  表示的向上取值,无论第三位为什么数都向上进一,结果:0.34
  
   
BigDecimal.ROUND_DOWN
  表示的不向上取值,无论第三位为什么数都是舍弃,结果:0.33
  
 
BigDecimal.ROUND_CEILING
  表示的往正数取值,如果得到的结果是正数的话,取值规则按照BigDecimal.ROUND_UP,如果是负数的话取值规则按照BigDecimal.ROUND_DOWN,结果:0.34
  
 
BigDecimal.ROUND_HALF_UP
表示的一般是我们熟悉的四舍五入,结果0.33
  
 
还有一些舍入规则,这里就不一 一列举了,一般常用的还是BigDecimal.ROUND_HALF_UP
  
   
3.BigDecimal 的其他方法
  

bigDecimal .compareTo(BigDecimal )

作用:BigDecimal 的比较大小,如果是 结果是1的话就是大于,-1的话就是小于,0的话就是等于
 
 
bigDecimal .toString()

作用:将bigDecimal 类型的值转换成字符串类型,类似的还有:bigDecimal.doubleValue(), bigDecimal.intValue(), bigDecimal.longValue() 等等

Java 开发中,BigDecimal 是一种重要的数据类型,用于高精度的计算,尤其适用于财务系统、科学计算等场景[^1]。以下是关于 BigDecimal 的使用方法和相关知识: ### 构造方法 BigDecimal 的构造方法有很多,最常用的包括: - 使用字符串构造:`BigDecimal(String val)` - 使用基本数据类型构造:`BigDecimal(double val)` 和 `BigDecimal(long val)` - 使用 BigInteger 构造:`BigDecimal(BigInteger val, int scale)` [^2]。 ### 比较大小 `compareTo()` 方法返回一个 int 类型的值,表示当前 BigDecimal 对象与参数 val 的大小关系。如果当前对象小于 val,则返回负整数;如果当前对象等于 val,则返回 0;如果当前对象大于 val,则返回正整数。示例代码如下: ```java import java.math.BigDecimal; public class BigDecimalComparison { public static void main(String[] args) { BigDecimal num1 = new BigDecimal("10.5"); BigDecimal num2 = new BigDecimal("5.5"); int result = num1.compareTo(num2); if (result < 0) { System.out.println("num1 < num2"); } else if (result == 0) { System.out.println("num1 = num2"); } else { System.out.println("num1 > num2"); } } } ``` ### 数值对齐模式 以向正无穷方向对齐为例,转换为正无穷方向最接近的数值。如果为正数,行为和 `ROUND_UP` 一样;如果为负数,行为和 `ROUND_DOWN` 一样,此模式不会减少数值大小。示例如下: ```java import java.math.BigDecimal; public class BigDecimalRounding { public static void main(String[] args) { BigDecimal a = new BigDecimal("0.098").setScale(2, BigDecimal.ROUND_CEILING); // 0.10 BigDecimal b = new BigDecimal("0.094").setScale(2, BigDecimal.ROUND_CEILING); // 0.10 BigDecimal c = new BigDecimal("-0.098").setScale(2, BigDecimal.ROUND_CEILING); // -0.09 BigDecimal d = new BigDecimal("-0.094").setScale(2, BigDecimal.ROUND_CEILING); // -0.09 BigDecimal e = new BigDecimal("-0.090").setScale(2, BigDecimal.ROUND_CEILING); // -0.09 BigDecimal f = new BigDecimal("0.090").setScale(2, BigDecimal.ROUND_CEILING); // 0.09 } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值