今天碰到个很奇怪的问题,用表格显示数据库里提取的值莫名期妙出现了9.08这种值,本以为是java自动科学计数法引起的,但一直跟下来发现全是9.08,没有转换的地方,用navicat查看了下,那列数据是900000000没错误,一直断点跟进mysql connector,才发现它读出来时就已经是9.08而不是9.0E8
mysql connector java 8.0.25 ResultSetImpl.java
public double getDouble(int columnIndex) throws SQLException {
Double res = getObject(columnIndex, Double.TYPE);
return res == null ? (double) 0 : res;//这里res的值就已经是9.08,ide中计算res-1,得出的结果是8.08,确定不是科学计数法
}
查看了下其它列,如果储存的数字达到10位,比如21000000000,读取的值是科学计数法2.1E10,但8位的却直接把E去掉了。
现在我就检测数字大小,如果不到1000就提取尾数计算本应是什么值,但这方法有点太low了。
想知道这个问题怎么解决,能不能在连接库中调整参数解决?
double改用BigDecimal试试(涉及精度这些,java一般用这个)