如何使InvariantCulture将逗号识别为小数分隔符?

如何使用Single.Parse解析1,2 ? 问的原因是因为,当我使用CultureInfo.InvariantCulture我没有按照我的CultureInfo.InvariantCulture得到1.2,而是12。

不应该“不变文化”忽视文化吗?

请考虑以下示例 :

 using System; using System.Globalization; public class Program { public static void Main() { Console.WriteLine(Single.Parse("1,2", CultureInfo.InvariantCulture)); Console.WriteLine(Single.Parse("1.2", CultureInfo.InvariantCulture)); float value; Console.WriteLine(Single.TryParse("1,2", NumberStyles.Float, CultureInfo.InvariantCulture, out value)); Console.WriteLine(Single.TryParse("1,2", out value)); Console.WriteLine(value); } } 

这个的输出将是

12
1.2

真正
12

但我期待:

1.2
1.2
真正
真正
1.2

基于 我对InvariantCulture 阅读 ,我应该得到那个结果,但我不是。

CultureInfo.InvariantCulture使用. 作为小数分隔符,并作为千位分隔符。 这与任何用户设置无关,并且与您获得的字符串无关,因此名称为“InvariantCulture”。 具体细节列在NumberFormatInfo.InvariantInfo MSDN页面上。

要使用,作为小数点分隔符,请不要使用CultureInfo.InvariantCulture 。 相反,使用一个使用的文化作为小数分隔符。 有许多适合您的需求。

或者,基于CultureInfo.InvariantCulture创建自定义文化。 您可以调用其Clone方法来创建可以修改属性的副本。

您链接的一篇文章说“不变文化与英语内部相关”。 所以’InvariantCulture’并不意味着“尝试匹配任何文化”。 它表示:忽略本地系统文化设置并将此数字视为特定标准格式(基本上是:英语文化标准)。 因此,如果您想处理不同的格式,您的选择是:

  1. 尝试解析没有specyfing文化的数字(将使用本地操作系统文化信息),然后尝试使用InvariantCulture,然后尝试一些后备文化,你希望格式化数字。
  2. 用。。。来代替 ‘。’ 并使用Invariant culture解析数字字符串。 您可能希望确保数字字符串不包含十进制组分隔符(如1,000.00)。