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));