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

时间:2014-04-13 15:41:20

标签: csv

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

先谢谢。

1 个答案:

答案 0 :(得分: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。但是,Excel从CSV导入时只会取你的号码的前15位数字(我不知道opencsv.jar)其他任何数字都设置为零。
  4. 解决此问题的一种方法是在Excel中再添加两列,并在另一列中表示数字除以1E8(高8位十进制数字),另一列表示模数1E8(低8位小数)柱。然后,将第一列乘以1E8,并在读取CSV文件后添加第二列以恢复原始数字。

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

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

    的公式

    These are the formulas I used to split the number in A1 into B1 and C1 then join again in D1

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

    This is what the values look like

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