法国文化的C#float.tryparse

Mur*_*dvi 10 c# culture

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

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

我可以简单地从"."输入从UI输入的金额.",",但通过文化有没有优雅/更好的方式来做到这一点?谢谢

Ode*_*ded 15

您可以使用带有格式提供程序的重载.您可以通过法国文化信息:

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.
Run Code Online (Sandbox Code Playgroud)

  • 请注意,此代码使用“NumberStyles.AllowDecimalPoint”。如果仅指定“AllowDecimalPoint”,则某些字符串将无法解析。例如,负数不起作用。默认情况下,“TryParse”使用“NumberStyles.Float | NumberStyles.AllowThousands`。`NumberStyle.Float` 本身是 `Integer | Float` 的组合。允许指数 | 允许小数点`。 (2认同)

Luk*_*keH 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
}
Run Code Online (Sandbox Code Playgroud)