语言不变 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")行得通吗?

语言不变 Double.ToString()

使用:

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);