语言不变Double.ToString()

f1w*_*ade 6 .net c# vb.net

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

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")工作吗?

Jep*_*sen 9

使用:

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}将插入数千个分隔符并舍入到四个二进制数(小数点后的四位数).


Mar*_*ell 9

.格式说明"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)