【发布时间】:2016-05-12 07:25:02
【问题描述】:
我有一个 C# 表单应用程序。作为其功能的一部分,它以字符串格式将 double 值写入文件,其中一些是 double.Infinity。
应用程序的另一部分从文件中读取这些值并将它们转换回双精度值。
在 Windows 7 上执行写入值部分并在 Windows 10 上执行读取相同文件时,转换“无限”时会出现格式异常。似乎默认 (us-en) 文化使用的符号在 Windows 8 和 10 之间发生了变化。
应用程序中有很多 Convert.ToDouble() 实例,通过 try-catch 或使用 double.tryParse() 处理每个实例不是可行的解决方案,因为它需要在许多项目中进行更改。
是否有任何解决方法来避免这种格式异常问题?
提前致谢,
卡皮尔
【问题讨论】:
-
嗯,这是一个定时炸弹。不是唯一的问题,例如,当您的程序移动到小数点用逗号写入的边界时,数据会变成乱码。如果您不想更改解析代码以使用带有 NumberFormat 参数的 Parse/TryParse 重载,就像您应该的那样,那么您必须使用您自己的文化更改 Thread.CurrentCulture 属性。使用使用您首选的 Negative/PositiveInfinitySymbol 值的自定义 NumberFormatInfo。
-
谢谢汉斯。在初始化应用程序时自定义当前文化时,设置预期的无穷大常数;它已经奏效了。
标签: c# windows-10 cultureinfo