zoukankan      html  css  js  c++  java
  • excel导入BigDecimal值精度问题

    项目中导入功能使用组件为easyexcel,导入有个字段是数值类型的,后台使用BigDecimal类型。

    测试提bug该字段值变了,经查是easyexcel版本原因导致的,项目中使用的是2.1.7版本,网上说升级成2.2.6以上就好了,项目中升级成最新版本2.2.10了。

    结果小数位超过6位,有的值被取整了(测试数据为999.99999999),有的被截取了(测试数据999.999999999)。测试数据小数位3-6位的值没有发生改变。等于好了一半,还有一半不行。debug测试发现读取excel的时候就已经是这样了。后来想起excel单元格设置,将该列设置为文本格式,再次导入测试发现数据都正常了。

     String patternConversionRatio = "^\d{1,4}(\.\d{1,6})?$";
                if (NumberUtils.isCreatable(conversionRatio)) {
                    flag = checkValueNotNull(conversionRatio, "转换比", flag, sb);
                    if (StringUtils.isNotBlank(conversionRatio)) {
                        flag = checkValueLength(conversionRatio, "转换比", 64, flag, sb);
                        flag = checkValuePattern(conversionRatio, "转换比大于0,支持小数(最多6位),最大输入小于10000", flag, sb, patternConversionRatio);
                    }
                    modle.setConversionRatio(new BigDecimal(conversionRatio).toString());
                } else {
                    flag = false;
                    sb.append("转换比不是数字;");
                }
     @ExcelProperty(value = "转换比")
        private String conversionRatio;

    解析excel的实体类,接值时用的String。存入数据库时的实体类才转换为BigDecimal。网上说版本升级就行,其实还有导入模板列设置为:文本,2个地方都要改。

    下面是导入后返回的文件,数据精度没有改变。

  • 相关阅读:
    分类和预测
    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
    字符串匹配的KMP算法
    灰度共生矩阵提取纹理特征源码
    redis永不过期,保留最新5条数据,StringUtils.join()等总结
    Session问题以及解决方案
    spring boot 配置 log4j2
    每日知识记载总结54
    spring cloud踩坑指南
    每日知识记载总结53
  • 原文地址:https://www.cnblogs.com/caihouzi/p/15044050.html
Copyright © 2011-2022 走看看