Double 类型java.lang.NumberFormatException: Infinite or NaN

1、错误原因
在对Double类型的数据进行计算操作,将结果转化为BigDecimal时抛出了NumberFormatException。

Infinite 、 NaN是double类型的常量:无穷大、非数。结果类型转换在构造BigDecimal对象时,构造方法中传入的Double类型为无穷大或非数字时会抛出NumberFormatException异常。

2、概念补充
任意整数(byte、short、int、long皆可)除以整数0结果为ArithmeticException;

0除以浮点0结果为NAN,细分的话包括以下三种情况:

(1)0/0.0

(2)0.0/0.0

(3)0.0/0

情况(3)虽然除的是个整数0,但在运算过程中发生了类型转化变成了浮点0;

任意数(八大基本类型皆可)除以浮点0结果为Infinity/-Infinity。

在java中浮点数0并非一个准确值,而是一个无限接近0的数。

method: findDataCompareRatio, exception: java.lang.NumberFormatException: Infinite or NaN, dubbo version: 2.6.2, current host: xxx
java.lang.NumberFormatException: Infinite or NaN

 

Double joinPeopleSameRatio = joinPeople4StartTime / Double.valueOf(joinPeople4LastStartTime2);
joinPeopleVo.setSameRatio(ReportUtil.retainDecimalPoint(2, joinPeopleSameRatio * ONE_HUNDRED));

优化后:
Double joinPeopleSameRatio = joinPeople4LastStartTime2 == 0 ? 0 : joinPeople4StartTime / Double.valueOf(joinPeople4LastStartTime2);
joinPeopleVo.setSameRatio(ReportUtil.retainDecimalPoint(2, joinPeopleSameRatio * ONE_HUNDRED));

Double 类型java.lang.NumberFormatException: Infinite or NaN

上一篇:Drupal <7.32“ Drupalgeddon” SQL注入漏洞(CVE-2014-3704)


下一篇:创建一个原型对象为 null 的对象