BigDecimal类型的简单使用

BigDecimal类型的使用:
简介:

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。

使用情况:

在一些浮点数做运算时,会导致浮点数的精度缺失.

构造方法:
方法名称方法解释
BigDecimal(int)创建一个具有参数所指定整数值的对象
BigDecimal(double)创建一个具有参数所指定双精度值的对象。(不建议采用)
BigDecimal(long)创建一个具有参数所指定长整数值的对象
BigDecimal(String)创建一个具有参数所指定以字符串表示的数值的对象 (建议使用)

为什么double类型的不建议使用:

因为在jdk描述中double的构造方法有一定的不可预知性.new BigDecimal(0.1) 中的0.1可能是0.10000000004.

解决方法:

建议使用String类型的构造方法,这里的值是可预期的,可以把double类型转换为String类型

转换方式,建议使用 Double.toString(),或是是 + “” 的形式

运算方法(及类型转换方法):
方法名称方法解释
add(BigDecimal)加法
subtract(BigDecimal)减法
multiply(BigDecimal)乘法
divide(BigDecimal)除法
toString()转换为字符串
doubleValue()以双精度数返回
floatValue()以单精度数返回
longValue()以长整数返回
intValue()以整数返回
注意:

divide(BigDecimal) ,除法会出现有余数不能整除的情况,这个时候会出现java.lang.ArithmeticException(算数异常)

解决方法:

我们要对结果进行保留相应位数的小数,并且选择舍入模式.

divide(BigDecimal,保留小数点后几位小数,舍入模式)

ROUND_CEILING //向正无穷方向舍入(ceiling)
ROUND_DOWN //向零方向舍入 (down)
ROUND_FLOOR //向负无穷方向舍入 (floor)
ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,向下舍入, 例如1.55 保留一位小数结果为1.5
ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果保留位数是奇数,使用 ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN (round_half_down(up))
ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,向上舍入, 1.55保留一位小数结果为1.6,(四舍五入)
ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式 (round_unnecessary)
ROUND_UP //向远离0的方向舍入

精确小数点位数:

BigDecimal.setScale():


参考博客链接:

https://blog.csdn.net/qq_35868412/article/details/89029288?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164187882316780271546085%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164187882316780271546085&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-89029288.pc_search_result_control_group&utm_term=BigDecimal&spm=1018.2226.3001.4187

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值