关于Double中的NaN问题

编程入门 行业动态 更新时间:2024-10-28 12:26:27

关于<a href=https://www.elefans.com/category/jswz/34/1768297.html style=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问题

本文发布于:2023-12-03 21:05:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1657635.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Double   NaN

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!