我有一个用户输入,其中包含的浮点值范围为: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
我可以简单地从“。”输入从UI输入的金额。 “,”,但通过文化有没有优雅/更好的方式来做到这一点? 感谢
答案 0 :(得分:14)
您可以使用带有格式提供程序的overload。您可以通过法国文化信息:
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.
答案 1 :(得分: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
}
答案 2 :(得分:1)
您可以在TryParse
方法中传递文化:
public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out float result);