语言不变Double.ToString()

时间:2013-10-10 12:18:35

标签: c# .net vb.net

我正在通过网络传递双倍, 目前我做

double value = 0.25;
string networkMsg = "command " + value;

networkMsg在英语中很好,其中0.25和法语在0,25,但是当我从法国计算机转到英语计算机时,一方将其设为0.25而另一方试图读取0 ,25。

所以我可以在我的代码中使用区域不变量方法。

我发现Val(networkMsg)无论在哪个区域都会读取0.25。

但我无法找到从值转换为0.25区域不变的保证方式。 会value.toString("0.0")工作吗?

3 个答案:

答案 0 :(得分:9)

格式说明符.中的"0.0"实际上并不代表“点” - 它表示“小数点分隔符” - 在法国和其他几种欧洲文化中都是,。你可能想要:

value.ToString(CultureInfo.InvariantCulture)

value.ToString("0.0", CultureInfo.InvariantCulture)

有关信息,您可以通过检查 fr 文化来查看此内容(以及许多其他内容):

var decimalSeparator = CultureInfo.GetCultureInfo("fr")
            .NumberFormat.NumberDecimalSeparator;

答案 1 :(得分:7)

使用:

string networkMsg = "command " + value.ToString(CultureInfo.InvariantCulture);

或:

string networkMsg = string.Format(CultureInfo.InvariantCulture, "command {0}", value);

这需要文件顶部的using System.Globalization;

注意:如果您需要完全精确,以便可以再次恢复精确的双精度,请使用Format解决方案与{0:R}而不是{0}。您可以使用其他格式字符串,例如{0:N4}将插入数千个分隔符并舍入到四个二进制数(小数点后四位)。

答案 2 :(得分:4)

将不变文化指定为格式提供者:

value.ToString(CultureInfo.InvariantCulture);