• 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个地方都要改。

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

  • 相关阅读:
    HTML/CSS基础知识(二)
    JS基础——变量
    HTML/CSS基础知识(四)
    NodeJS学习之win10安装与sublime配置
    HTML/CSS基础知识(一)
    HTML/CSS基础知识(三)
    win10安装git
    C#获取本机局域网IP和公网IP
    如何书写.md格式文档
    C# 获取硬盘空间信息 盘符总大小、剩余空间、已用空间
  • 原文地址:https://www.cnblogs.com/caihouzi/p/15044050.html
Copyright © 2020-2023  润新知