【发布时间】:2011-02-08 08:12:10
【问题描述】:
我编写了一个小程序,该程序在不同操作系统(xp、win7)上的工作方式不同。问题是程序读取了一些浮点数,例如 2,686。
一个操作系统 (win7) 将其转换为 float true,但在 xp 上出错并打印 2686。我如何理解操作系统用于十进制数字的符号?
谢谢。
【问题讨论】:
标签: c# operating-system decimal
我编写了一个小程序,该程序在不同操作系统(xp、win7)上的工作方式不同。问题是程序读取了一些浮点数,例如 2,686。
一个操作系统 (win7) 将其转换为 float true,但在 xp 上出错并打印 2686。我如何理解操作系统用于十进制数字的符号?
谢谢。
【问题讨论】:
标签: c# operating-system decimal
string sep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
【讨论】:
NumberDecimalSeparator。已更新。
这不取决于操作系统,而是取决于每台 PC 上的(默认)语言设置。
如果您使用:double value = double.Parse(text);,您将使用用户配置的任何文化。如果您知道输入是某种格式,请使用:
var ci = CultureInfo.GetCulture("nl-NL"); // dutch
double value = double.Parse(text, ci);
每个转换的函数都有(1 个或多个)重载以采用 FormattingProvider(文化)。
【讨论】:
使用用户当前文化解析浮点数 double.Parse(string, System.Globalization.CultureInfo.CurrentCulture);
【讨论】:
小数点分隔符由当前文化决定。
如果您想使用特定字符作为小数分隔符,您可以使用您喜欢的任何分隔符创建自定义NumberFormatInfo 对象。如果你想使用句点作为 deimcal 分隔符,你可以简单地使用InvariantCulture:
double n = Double.Parse(s, CultureInfo.InvariantCulture);
如果你想使用逗号,你可以选择一个有这个的文化,例如瑞典语:
double n = Double.Parse(s, CultureInfo.GetCultureInfo("sv-SE"));
【讨论】: