【问题标题】:How to preserve decimal precision when exporting to a csv and opened with excel导出到 csv 并使用 excel 打开时如何保持小数精度
【发布时间】:2016-03-04 15:13:24
【问题描述】:

我已将值导出到 c# 中的 csv 文件。

csv 文件的每个值都有 5 个小数位,但是当使用 excel 打开时,每个小数位都会减少到两个。

有没有办法以编程方式确保在 excel 中打开 csv 时保留小数位?

var nFI = new NumberFormatInfo();

nFI.NumberDecimalDigits = precision;
line += (CsvEscape(((decimal)dr[colName]).ToString("N", nFI)) + ",");

这是将小数导出到 csv 的方式。

【问题讨论】:

  • Excel 在处理 csv 文件时简直就是邪恶。我们有一个将 gtin 数字(13 位)导出到 csv 的工具。在 Excel 中打开时,它会自动将它们的表示更改为科学表示,用零替换许多数字。在 Excel 中查看 csv 时,切勿点击保存。
  • 解决了!请看下面的答案

标签: c# excel csv decimal precision


【解决方案1】:

输出到 csv 文件时,要保留小数位,请将值括在双引号中并在前面加上“=”符号。 (请原谅代码,它仍然是原型形式)

line += ("=" + '"' (((decimal)dr[colName]).ToString("N",nFI).Replace(",",""))+ '"' + ",");

这输出为 ="63000.00000",

【讨论】:

    【解决方案2】:

    您是否将格式提供程序 (NumberFormatInfo) 用于任何其他目的?如果您在ToString() 中省略格式参数,它应该按原样输出。

    【讨论】:

    • 这就是我试图开始的,但因为 5 个小数位中有 4 个是 0,所以它摆脱了它们。客户要求声明他们需要在此处归零。
    • 尝试使用ToString("0.000000"); -- 这将对任何不存在的数字使用零。所以“0”变成0.000000,1.1变成1.100000。 0.5变成0.500000等。本页有参考:msdn.microsoft.com/en-us/library/0c899ak8.aspx
    • 这似乎不起作用,没有小数位,除非该位置大于 0。
    • 如果在记事本或类似工具中查看时值是正确的,那么问题更多在于 Excel 如何格式化数字,正如 CSharpie 上面所说的那样。
    猜你喜欢
    • 2020-01-02
    • 2018-01-20
    • 1970-01-01
    • 2019-08-12
    • 2019-09-17
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多