我有一个网络应用程序,用户可以在其中更改其区域设置,但是当用户将区域设置更改为法语加拿大“fr-CA”时,双重转换会导致无效的格式字符串错误。会发生什么,我从数据库中获取一些数据,其中double值以字符串形式出现,例如“232.33”。问题是这个字符串不能使用Parse或它的任何变体转换为double ...我想知道有些人可以解释如何解析这个double,以便fr-CA语言环境允许我得到双倍d = 232.33 < / p>
由于
答案 0 :(得分:2)
Parse
和ToString
方法是特定于文化的,正如您可能已经注意到的那样。
如果你总是期望这些文化处于不变文化中(格式232.33而不是232,33)
您可以使用Parse
的重载来指定数字格式
decimal myDecimal = decimal.Parse("232.33", CultureInfo.InvariantCulture);
将小数转换为字符串
也是如此decimal myDecimal = 232.33m;
string myString = myDecimal.ToString(CultureInfo.InvariantCulture); // "232.33" regardless of current threads culture
参见资源:
http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.invariantculture.aspx
稍微偏离主题,但您应该将数据库中的小数存储为正确的数字类型而不是字符串。这样,如果需要,您可以在查询中使用聚合和数学,并且您可以获得更好的存储优化,而且您不必解析字符串。