我是靠谱客的博主 顺心季节,最近开发中收集的这篇文章主要介绍java中BigDecimal使用注意事项,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

比较

必须使用compareTo进行比较,看返回结果是-1、0、1判断两个数是A大于B,等于B,还是小于B。

calcResult.getTotalPromotion().compareTo(BigDecimal.ZERO) > 0
dangdangVipDiscount.compareTo(BigDecimal.valueOf(100)) == 0

转换

BigDecimal没有提供自动装箱的支持,所以不能直接和原始数据进行比较、运算,在比较或者运算前需要把非BigDecimal的数据转成BigDecimal数据:

BigDecimal.valueOf(100)

乘除

要先乘后除,以防止除不尽时(而小数计算时大多情况会出现除不尽),被舍弃的小数的影响被后续的乘法进一步放大。
除法的位置需要注意一下,必须加上RoundingMode,否则对于除不尽的情况,会抛出ArithmeticException。具体英文描述是:if the exact quotient(商数,即除法计算结果) does not have a terminating decimal expansion。

promotionPriceMap.get(productId).multiply(promotionPrice).divide(totalPrice, 2, BigDecimal.ROUND_HALF_UP)

精确到指定位数

salePrice.multiply(shopVIPDiscount).setScale(2, RoundingMode.HALF_UP)

price.divide(total, 2, BigDecimal.ROUND_HALF_UP)//可能不能除尽的情况使用

discount.divide(10) //确定能够除尽的情况使用

最后

以上就是顺心季节为你收集整理的java中BigDecimal使用注意事项的全部内容,希望文章能够帮你解决java中BigDecimal使用注意事项所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部