【问题标题】:Parsing floats with Single.TryParse fails使用 Single.TryParse 解析浮点数失败
【发布时间】:2012-08-28 18:37:43
【问题描述】:

在 MSDN 上有一篇关于 Single.TryParse 的文章,其中包含以下示例代码: http://msdn.microsoft.com/en-us/library/26sxas5t%28v=vs.100%29.aspx

// Parse a floating-point value with a thousands separator.
value = "1,643.57";
if (Single.TryParse(value, out number))
    Console.WriteLine(number);
else
    Console.WriteLine("Unable to parse '{0}'.", value);

问题在文章中 TryParse 返回true 并且字符串被转换,但是当我尝试它时,它是false。我该如何解决这个问题?


UPD:为了简化解析,可以使用以下两行:

NumberStyles style = System.Globalization.NumberStyles.Any;
CultureInfo culture = CultureInfo.InvariantCulture;

此设置允许解析带有前导和尾随空格字符的负浮点数和字符串。

【问题讨论】:

  • 您的系统文化是否使用, 作为千位分隔符和. 作为小数分隔符?例如,在德国,情况并非如此。
  • 你的问题可能是文化。仅当区域性使用 . 作为小数分隔符时,才能解析您的号码。所以你应该使用一个带有文化的重载,并指定InvariantCulture
  • 哦,原来是分隔符。有那么一瞬间,我以为这其中牵涉到某种恶业。
  • 显然问题是你不在美国。是时候搬家了。

标签: c# floating-point tryparse


【解决方案1】:

你需要像这样设置文化

using System.Globalization;

string value = "1345,978";
NumberStyles style = System.Globalization.NumberStyles.AllowDecimalPoint;
CultureInfo culture = System.Globalization.CultureInfo.CreateSpecificCulture("fr-FR");
if (Single.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);

来自 msdn:Single.TryParse Method (String, NumberStyles, IFormatProvider, Single%)

float usedAmount;
// try parsing with "fr-FR" first
bool success = float.TryParse(inputUsedAmount.Value,
                              NumberStyles.Float | NumberStyles.AllowThousands,
                              CultureInfo.GetCultureInfo("fr-FR"),
                              out usedAmount);

if (!success)
{
    // parsing with "fr-FR" failed so try parsing with InvariantCulture
    success = float.TryParse(inputUsedAmount.Value,
                             NumberStyles.Float | NumberStyles.AllowThousands,
                             CultureInfo.InvariantCulture,
                             out usedAmount);
}

if (!success)
{
    // parsing failed with both "fr-FR" and InvariantCulture
}

在这里回答:C# float.tryparse for French Culture

【讨论】:

  • NumberStyles 和 CultureInfo 不是可识别的关键字。 Using我可以和他们合作什么?
  • 您需要使用 System.Globalization 添加;
【解决方案2】:

你对你的文化有问题:性格

你可以在你的字符串中使用CultureInvariant

【讨论】:

    猜你喜欢
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多