BigDecimal 的一个小坑

今天用BigDecimal 遇到一个小坑,特地在此mark一下,踩坑的各位道友可看看。

直接上错误代码

String a = "2";
        BigDecimal b = new BigDecimal(a);
        BigDecimal c = BigDecimal.valueOf(10.82930);
        BigDecimal d = b.divide(c,RoundingMode.HALF_DOWN);
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);

看似没有啥问题,但是运行起来d会一直等于0,暂时不知道什么原因,待老衲日后细细琢磨琢磨。

解决方法:

把a改为带小数点的字符串就正常了,如"2.0","2.0382",但是坑又来了,此时d的小数位完全取决于字符串a的小数点位!

要判断一个 BigDecimal 对象是否为空,可以使用以下方法: 1. 使用 equals 方法和 BigDecimal.ZERO 进行比较:b.equals(BigDecimal.ZERO)。这种方法会先比较值的大小是否相等,然后再比较保留小数点位数(scale)是否相等。所以要注意,如果你的 BigDecimal 对象的值和保留位数都与 BigDecimal.ZERO 相等,equals 方法会返回 true,否则返回 false。 2. 使用 compareTo 方法和 BigDecimal.ZERO 进行比较:b.compareTo(BigDecimal.ZERO) == 0。这种方法会直接比较数值是否相等,如果返回值为 0,则表示两个 BigDecimal 对象相等,即为零。如果不相等,则不为零。 3. 还可以使用其他方法,如判断 BigDecimal 的值是否为 null 或者判断 BigDecimal 的值是否为零。但是需要注意,判断一个 BigDecimal 对象是否为空要谨慎使用这些方法,因为 BigDecimal 的值为 null 或者为零并不代表其为空。 总之,要判断一个 BigDecimal 对象是否为空,你可以使用 equals 方法和 BigDecimal.ZERO 进行比较,或者使用 compareTo 方法和 BigDecimal.ZERO 进行比较。这样可以准确地判断一个 BigDecimal 对象是否为零。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [Bigdecimal类型判断是否等于0(用equals方法的坑)](https://blog.csdn.net/jixinhuluwa/article/details/72626598)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Java BigDecimal类用法详解](https://download.csdn.net/download/weixin_38611388/12796584)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值