我正在通过网络传递双倍,目前我这样做
double value = 0.25;
string networkMsg = "command " + value;
Run Code Online (Sandbox Code Playgroud)
的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);
Run Code Online (Sandbox Code Playgroud)
要么:
string networkMsg = string.Format(CultureInfo.InvariantCulture, "command {0}", value);
Run Code Online (Sandbox Code Playgroud)
这需要using System.Globalization;在您的文件的顶部.
注意:如果您需要完全精确,以便可以再次恢复精确的双精度,请使用Format解决方案{0:R}而不是仅使用解决方案{0}.您可以使用其他格式字符串,例如{0:N4}将插入数千个分隔符并舍入到四个二进制数(小数点后的四位数).
该.格式说明"0.0"并不实际上意味着"点" -它的意思是"小数点分隔符" -这是,在法国和其他一些欧洲文化.你可能想要:
value.ToString(CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)
要么
value.ToString("0.0", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)
有关信息,您可以通过检查fr文化来查看此(以及许多其他内容):
var decimalSeparator = CultureInfo.GetCultureInfo("fr")
.NumberFormat.NumberDecimalSeparator;
Run Code Online (Sandbox Code Playgroud)