【发布时间】:2014-06-23 21:50:46
【问题描述】:
如何用Single.Parse 解析1,2?问的原因是因为,当我使用CultureInfo.InvariantCulture 时,我没有得到我想要的 1.2,而是 12。
“不变文化”不应该忽略文化吗?
Consider the following example:
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
【问题讨论】:
-
var single = float.Parse("1,2", CultureInfo.GetCultureInfo("tr-TR")); -
好吧,我将加入:
var single = float.Parse("1,2", CultureInfo.GetCultureInfo("nl-NL"));基本上,InvariantCulture使用.作为小数分隔符。Single.Parse不会忽略它,但,不是InvariantCulture中的小数分隔符。 -
@Default 它使用固定的文化,恰好使用
,作为小数分隔符。任何使用,的文化都可以。重要的是用户的文化是不使用的。 -
@hvd - 如果我随后转移到使用另一个小数分隔符的区域性,我将如何处理 other 分隔符?我是否真的需要使用三种文化(我目前的一种使用
.和一种使用,)来正确解析小数点......?这看起来很……笨重…… -
@Default 您需要确定字符串的格式。如果它们总是使用句点,请使用
InvariantCulture。如果他们总是使用逗号,请使用不同的(但仍然是固定的)文化。如果它们可能包含其中任何一个,那么您就会遇到问题:您无法确定 1,000 代表一还是一千。
标签: c# parsing floating-point