double输出科学计数法导致的生产bug
现有需求:通过提前设置的好的转换模式和汇率,将源币种金额转换成目标币种金额。
其中转换模式在数据库中为int,例如
值 | 描述 |
---|---|
1 | 表示源币种*汇率=目标币种 |
2 | 表示源币种%汇率=目标币种 |
汇率为double,例如:
源币种 | 目标币种 | 汇率 | 日期 |
---|---|---|---|
韩元 | 美元 | 0.0008453 | 2021-12-16 |
欧元 | 日元 | 129.3436 | 2021-12-16 |
我们系统中判断,如果当天不存在汇率,需要查找之前日期的汇率,并且汇率必须大于0。如果是0或者不存在汇率系统都要提示让管理员维护汇率。
问题描述:
顾问早上打电话说:我维护了韩元兑换美元的汇率,但是系统依然提示要我维护汇率!!!
当时第一反应是不是配置出错了,让他仔细看看,经过再三确认,汇率确实存在,并且大于0。由此判断系统出现BUG!!!
先看问题代码,大概如下:
//根据源币种和目标币种以及日期获取 转换模式 和 汇率
public void getConverModeAndRateInfoByCurrency(String sourceCurrency,String targetCurrency,LocalDate time) {
//1.查询数据库,只返回一条数据,如果没有报错。 rs为数据库的一条数据结果集,代码中是这样进行处理的。
String converModeAndRate = rs.getInteger("conver_mode") + "-" + rs.getDouble("rate");
//2.忽略空值,到这里一定有 转换模式 和 汇率
String[] converModeAndRates = converModeAndRate.splite("-");
Double zero = 0.0d;
//大概就是这样的判断,看他的汇率是否是0
if(converModeAndRates.length != 2 || zero.compareTo(new Double(converModeAndRates[1])) >= 0){
//报错: 提示管理员维护汇率!!!
}
}
请先思考,这段代码有什么问题呢???
反正我当时并没有发现有什么地方会出现bug。还是太年轻了,基础不牢靠。。。
原因分析:
在说具体问题之前,我们先来看看下面这段代码:
public static void