我正在通过网络传递双倍, 目前我做
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")
工作吗?
答案 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);