如果您正在使用CultureInfo.CurrentCulture
,请确保设置您的线程的 CurrentCulture。
否则它最终可能会以错误的方式解析它(取决于您计算机上的语言设置)。
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
然后你可以安全地使用它:
double.TryParse(dollarString, NumberStyles.Any,
CultureInfo.CurrentCulture.NumberFormat, out newDollar);
或者,您可以创建这样的函数(在不设置文化的情况下获得正确的格式)。
旁注:在瑞士,这可能会引起麻烦,因为仍然可以解析欧元。因此 5,05 (€) 将成功解析为 505 (CHF)。相信我,你不希望这种情况发生。
public static double GetDouble(string value, double defaultValue)
{
double numberToConvert;
if (!double.TryParse(value, System.Globalization.NumberStyles.Any,
CultureInfo.CurrentCulture, out numberToConvert) &&
!double.TryParse(value, System.Globalization.NumberStyles.Any,
CultureInfo.GetCultureInfo("en-US"), out numberToConvert) &&
!double.TryParse(value, System.Globalization.NumberStyles.Any,
CultureInfo.InvariantCulture, out numberToConvert))
{
numberToConvert= defaultValue;
}
return numberToConvert;
}