如何从CSV文件中获取实际值而不是指数值

问题描述 投票:1回答:1

我面临着指数值的问题(例如:1.4588E + 12)。根据我的要求,我需要从CSV文件中读取具有指数值的数据。我需要具有精确值而不是指数值。在我的应用程序中,我正在获取Microsoft Excel文件,当我更新数据时,如数字超过15位并保存为.csv文件此值保存为1.4588E + 12而不是1458795648552.要读取此CSV文件我正在使用opencsv.jar。在阅读CSV文件时有没有办法获得实际价值?

提前致谢。

csv
1个回答
0
投票

有几个问题:

  1. Excel使用double precision floating point来表示数字。这种格式在有效数字中有52个显式位加上1个隐含位,总共53位,这几乎足以表示任何16位十进制数,但不是全部(53 log10(2)≈15.955)。因此请注意,并非所有16位十进制数字都在Excel中保持完全精确。
  2. 当您从Excel导出为格式化为数字(而不是文本)的CSV数字时,Excel将为大数字选择科学记数法,并且您可能会丢失精度,因为并非所有有效数字都被写出来,当发生这种情况时,您无能为力在读取CSV文件以恢复丢失的数字时执行此操作。在保存为CSV之前,您应该使用这些数字格式化列作为文本。
  3. 假设您有一个16位十进制数字,它可以用双精度浮点表示,并将其保存为文本...您将数字存储为CSV时没有丢失精度。但是,当从CSV导入时,Excel只会取你的号码的前15位数字(我不知道opencsv.jar),其他任何数字都设置为零。

解决此问题的一种方法是在Excel中再添加两列,并在一列中表示除以1E8(高8位小数)的数字,在另一列中用数字1E8(低8位小数位)表示。然后,将第一列乘以1E8,并在读取CSV文件后添加第二列以恢复原始数字。

以下是使用Google文档但在Excel中应该类似的示例:

这些是我用来将A1中的数字分成B1和C1然后再连接到D1的公式

这是值的样子,注意单元格D1具有单元格A1中的重建值

您可以隐藏B列和C列,但仍将它们导出为CSV。这样,填写电子表格的人不知道A列中的数字是在B列和C列中被操纵的。您不需要D列,我把它放在那里只是为了让您可以看到A列中的数字可以从B列和C列的值中恢复。

© www.soinside.com 2019 - 2024. All rights reserved.