关于Double中的NaN问题

官方解释:

public static final double NaN = 0.0d / 0.0;

一个常量,包含一个类型为double的非数字(NaN)值。它相当于Double.longBitsToDouble返回的值(0x7ff8000000000000L)

起因:

最近在写代码时,因为涉及到计算,当时用了Double作为返回值,后续转成BigDecimal,但在测试过程中,发现有事会报异常:NumberFormatException:Infinite or NaN。

翻阅源码发现:

其中红框部分,是抛出的异常,条件为Double无穷大或NaN,以前对Double的认识停留在浅薄的表面,遇到问题,才发现还有这两种情况。Double提供了判断两种情况的方式,还有其他的判断方法,有兴趣的可以自己查阅。

解决方法:

1.可以用加入对NaN的判断

例:

Double value=...
value==null||value.equals(Double.NaN)?BigDecimal.ZERO:new BigDecimal(value.toString());

2.直接使用BigDecimal接收值 不再使用Double

我采用的是第二种。

此次问题虽然简单,但是也提醒我了:以后涉及小数点计算,能用BigDecimal接收还是用BigDecimal吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值