C# - 错误的字符串到单一的转换[重复]

Posted

技术标签:

【中文标题】C# - 错误的字符串到单一的转换[重复]【英文标题】:C# - wrong string to single conversion [duplicate] 【发布时间】:2017-02-03 09:57:39 【问题描述】:

我正在编写一个程序来将数据从微控制器传输到 PC。数据为浮点格式。我尝试使用Convert.ToSingle(string)将字符串转换为float,但转换结果错误:

    “0.11”转换为 11,有时是 12。 “0.10”转换为10.等

如您所见,它正在失去前导 0. ,这是出乎意料的。怎么会这样?

【问题讨论】:

尝试检查您的区域设置。我假设转换不起作用的系统设置了不同的小数分隔符(可能是逗号)。 检查重复的问题。 【参考方案1】:

您的问题是特定于文化的。在某些文化中,浮点数由 , 分隔,在某些文化中,它们由 . 分隔

你的情况

String a = "0,11";
Convert.ToSingle(a)

应该会导致您想要的结果为 0,11。

因此,您应该明确指定使用. 作为小数分隔符的相关文化。一种可能性是基于英语的不变文化。

尝试以下方法:

String a = "0.11";
Convert.ToSingle(a, CultureInfo.InvariantCulture)

【讨论】:

你:让它保持不变,这样两种可能性都可以接受 不,InvariantCulture 仅使用 "." 表示 NumberDecimalSeparator,而仅使用 "," 表示NumberGroupSeparator。它不允许“两种可能性”。例如,Convert.ToSingle("23.456,78", CultureInfo.InvariantCulture) 不成功。 Convert.ToSingle("23456,78", CultureInfo.InvariantCulture) 产生的价值接近 230 万,而不是 23000。 @JeppeStigNielsen 感谢您对我的答案的详细更正,您愿意编辑它并从您的评论中添加更正细节吗?

以上是关于C# - 错误的字符串到单一的转换[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中将字符串转换为日期[重复]

如何在C#中将字节转换为字符串[重复]

C#字节数组到字符串数组[重复]

如何使用 PInvoke 将 std::wstring 从 C++ 返回到 C# 而无需编写字符串缓冲区转换 [重复]

十六进制字符串到字节数组 C# [重复]

在 C# 中有效地将字符串转换为字节数组(不使用编码)[重复]