记一个Excel中的大整数精度丢失问题


=Start=

缘由:

最近在做数据分析的过程中碰到一个比较诡异的问题,之前以为是数据平台的引擎导致的,后来没想到是Excel在处理超大数值的整数时自身的精度丢失导致的,一般还真的很难遇到这种场景(对应字段需要是bigint类型的超过15位的整数,导出格式为Excel,然后最后几位还不能是0,最后你还要拿原始数据进行查找验证,几个条件组合在一起才会发现)。

在此记录一下这个问题,同时通过一个简单的样例进行验证,方便大家理解,同时也给出一个简单的解决方案进行规避。

正文:

参考解答:

先说结论:

  • 在Excel中录入的数字超过11位,默认就会以科学记数法的形式显示。
  • 大于15位的数字后面全部变为0。

解决办法:

  • 导出的时候将对应列的类型转换成string类型。
  • 或者导出为csv或txt的文本格式。

// 测试验证SQL
SELECT
1012345678 as d10,
11123456789 as d11,
121234567891 as d12,
1312345678912 as d13,
14123456789123 as d14,
151234567891234 as d15,
1612345678912345 as d16,
16123456789123456 as d17,
161234567891234567 as d18,
cast(161234567891234567 as string) as s18
;

在大数据平台上执行之后,导出为Excel格式之后打开(Excel中当数字的长度超过11的时候默认就科学记数法显示了,注意A列和B列还有后面几列的区别):

移动光标的位置到G2之后,你会发现d16的值变成了(还是上图):
1612345678912340
而不是:
1612345678912345
最后一位的5变成了0。

对于18位长度的数字,后面4位的精度就已经丢失了(本该是4567,结果是5000):

刚开始以为只是显示的问题,后来发现不是(选中特定列,然后「右键」、「设置单元格格式…」、「数值」然后设置「小数位数」为0,但精度还是丢失的):

参考链接:

解决Excel或者CSV数值精度缺失问题(科学记算法精度缺失问题)
https://blog.csdn.net/weixin_42425365/article/details/111059168

可否不以科学记数法的方式表示大于99999999999的数值?

怎么让excel不转换为科学计数法?
https://www.zhihu.com/question/20096750

Excel粘贴长文本数字 精度丢失
https://blog.csdn.net/zirufeng/article/details/54891651

python csv文件使用excel打开数字丢失精度
https://blog.csdn.net/leaves_story/article/details/102743622

=END=

,

《 “记一个Excel中的大整数精度丢失问题” 》 有 2 条评论

  1. 解决 Excel 打开 UTF-8 编码 CSV 文件乱码的 BUG
    https://blog.csdn.net/oyi319/article/details/6406506
    `
    直接用Excel 2007打开UTF-8编码的CSV文件会导致汉字部分出现乱码。

    原因是Excel 2007以ANSI格式打开,不会做编码识别。

    打开UTF-8编码的CSV方法:
    1) 打开Excel 2007
    2) 执行“数据”->“自文本”
    3) 选择CSV文件,出现文本导入向导
    4) 选择“分隔符号”,下一步
    5) 勾选“逗号”,去掉“Tab 键”,下一步,完成
    6)在“导入数据”对话框里,直接点确定

    ==

    另外一种方法,将UTF-8文件转换为ANSI(936)或国标码。
    `

    解决csv文件打开是乱码的问题
    https://blog.csdn.net/qq_39135609/article/details/88535543

  2. 怎么用Excel做雷达图?
    https://www.edrawmax.cn/article/excel-ldt.html
    `
    雷达图是以从同一点开始的轴上表示的三个或更多个定量变量的二维图表的形式显示多变量数据的图形方法。多指标的分布组合在一起非常像雷达的形状,因此而得名。

    接下来以Microsoft Excel 为例绘制雷达图,可以参考以下步骤:

    第 1 步:启动 Microsoft Excel 并添加数据源
    打开Microsoft Excel,在其中添加数据源,一个完整的雷达图,至少包含两个以上指标(例:责任心、积极性、协调性等)、被描述对象(例:员工A),因此数据源需要包含这两组信息。最少2列(1列是指标,1列是被描述对象),最少2行(每一行描述1个特定指标的名称和被描述对象的取值),比如:

    指标 品牌A 品牌B
    价格 70 30
    多样性 75 35
    外观 70 40
    耐用性 60 25
    质量 80 35
    售后支持 65 45
    营销策略 60 50

    第 2 步:插入图表
    选中第1步的数据源,选择“插入-图表-推荐的图表-所有图表-雷达图-确定”。

    第 3 步:美化颜色和选择样式
    点击雷达图表,选择“设计-图表样式-更改颜色或选择图表样式”,表格中的图表就会实时跟着变化。

    第 4 步:保存/共享雷达图文件
    当雷达图绘制完成后,根据需要你可以选择将文件保存到本地,也可以将它保存到OneDrive等第三方云盘然后共享给其他用户。
    `

回复 abc 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注