13

我有一个用户输入,它可以包含浮点值,范围为:3.06 或 3,06 我们所处的文化是法语,因此当用户输入 3.06 并且我在这个值上运行 float.tryParse 时,它​​不会转换为 3.06一个新变量(浮点型)

// inputUsedAmount.Value from UI is : 3.06
float usedAmount = 0.0f;
float.TryParse(inputUsedAmount.Value, out usedAmount);
// returns false

我可以简单地对从“。”从 UI 输入的金额进行替换。到“,”,但是通过 Culture 有没有一种优雅/更好的方式来做到这一点?谢谢

4

3 回答 3

18

You can use the overload that takes a format provider. You can pass through a French culture info:

string value;
NumberStyles style;
CultureInfo culture;
double number;

value = "1345,978";
style = NumberStyles.AllowDecimalPoint;
culture = CultureInfo.CreateSpecificCulture("fr-FR");
if (Double.TryParse(value, style, culture, out number))
   Console.WriteLine("Converted '{0}' to {1}.", value, number);
else
   Console.WriteLine("Unable to convert '{0}'.", value);
// Displays:
//       Converted '1345,978' to 1345.978.
于 2010-04-27T16:07:57.097 回答
6
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
}
于 2010-04-27T16:25:46.623 回答
0

您可以在方法内传递文化TryParse

public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out float result);
于 2010-04-27T16:03:58.410 回答