在非英语Windows下转换十进制

时间:2013-03-05 18:05:50

标签: c# .net parsing invariantculture

我在西班牙语MS Windows Server下安装了C#应用程序。

所以这段代码的工作方式错误。

decimal? top = 80.0m;
double convertedTop = (double)decimal.Parse(top.ToString(), CultureInfo.InvariantCulture); 

convertedTop为80000,但应为80.0

1 个答案:

答案 0 :(得分:7)

不要那样做。

您的代码效率非常低。

您应该将其更改为

double convertedTop = Convert.ToDouble(top);

如果top的编译时类型为decimaldecimal?(与objectIConvertibleValueType相对),你可以使用更高效的编译时转换:

double convertedTop = (double)top;

要回答这个问题,top.ToString()对文化非常敏感 你也需要在那里通过CultureInfo.InvariantCulture Nullable<T>无法解除ToString(IFormatProvider),因此您需要在Value上执行此操作并明确处理null