Double中的NaN问题"/>
关于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吧。
更多推荐
关于Double中的NaN问题
发布评论