在不同的操作系统上定义十进制数,如何理解C#是否使用了点或逗号

时间:2010-04-15 11:23:21

标签: c# operating-system decimal

我编写了一个小程序,程序在不同的操作系统上运行方式不同(xp,win7)问题是程序会读取一些浮点数,例如2,686。

一个操作系统(win7)将其转换为float true,但在xp上出错并将其打印2686.如何理解操作系统使用哪个十进制数字符号?

感谢。

4 个答案:

答案 0 :(得分:5)

string sep = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;

答案 1 :(得分:2)

这不依赖于操作系统,而是依赖于每台PC上的(默认)语言设置。

如果您使用:double value = double.Parse(text);,您正在使用用户配置的任何文化。如果您知道输入采用某种格式,请使用:

var ci = CultureInfo.GetCulture("nl-NL");  // dutch
double value = double.Parse(text, ci);

每个转换的函数都有(1个或多个)重载来获取FormattingProvider(Culture)。

答案 2 :(得分:1)

使用double.Parse(string,System.Globalization.CultureInfo.CurrentCulture)用户当前文化解析浮点数;

答案 3 :(得分:1)

小数点分隔符由当前文化决定。

如果要将特定字符用作小数点分隔符,可以使用您喜欢的任何分隔符创建自定义NumberFormatInfo对象。如果您想使用句点作为deimcal分隔符,只需使用InvariantCulture

即可
double n = Double.Parse(s, CultureInfo.InvariantCulture);

如果您想使用逗号,您可以选择具有该逗号的文化,例如瑞典语:

double n = Double.Parse(s, CultureInfo.GetCultureInfo("sv-SE"));