语言不变 Double.ToString()
本文关键字:ToString Double 语言 | 更新日期: 2023-09-27 18:34:41
我正在通过网络传递双精度,目前我做
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")
行得通吗?
使用:
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}
将插入千位分隔符并舍入为四个小数位数(小数点后四位数字(。
从 C# 6.0 (2015( 开始,现在可以使用:
string networkMsg = FormattableString.Invariant($"command {value}");
格式
说明符"0.0"
中的.
实际上并不表示"点" - 它的意思是"小数分隔符" - 这在法国和其他几个欧洲文化中,
。您可能希望:
value.ToString(CultureInfo.InvariantCulture)
或
value.ToString("0.0", CultureInfo.InvariantCulture)
有关信息,您可以通过检查 fr 区域性来查看以下内容(以及许多其他内容(:
var decimalSeparator = CultureInfo.GetCultureInfo("fr")
.NumberFormat.NumberDecimalSeparator;
将固定区域性指定为格式提供程序:
value.ToString(CultureInfo.InvariantCulture);