使用easyexcel时碰到一个这样的问题,读取某个office编辑过的07版excel时,出现了小数点精度问题。例如,156.23这个值,使用easyexcel解析后得到的Double对象就变成了156.22999999999999。
我尝试去查看了excel解压后的文件,发现这条数据在xml里存储的值就是156.22999999999999。
奇怪的是,当我在把实体类里把Double的字段修改成String类型后,读出来的数据就是期望的156.23。
查看easyexcel源码,其实easyexcel解析excel单元格的时候,会根据单元格格式选择不同的converter。在本例中,由于是数字类型单元格解析成Double类型字段,调用的就是DoubleNumberConverter。这个Converter是这样的:
public class DoubleNumberConverter implements Converter<Double> {
@Override
public Class supportJavaTypeKey() {
return Double.class;
}
@Override
public CellDataTypeEnum supportExcelTypeKey() {
return CellDataTypeEnum.NUMBER;
}
@Override
public Double convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
GlobalConfiguration globalConfiguration) {
return cellData.getNum