在非英语Windows下转换十进制

本文关键字:转换 十进制 Windows 英语 | 更新日期: 2023-09-27 18:02:15

我已经在西班牙MS Windows Server下安装了c#应用程序。

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

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

convertedTop为80000,但应该是80.0

在非英语Windows下转换十进制

不要这么做。

你的代码效率极低。

应该改成

double convertedTop = Convert.ToDouble(top);

如果top的编译时类型是decimaldecimal?(而不是objectIConvertibleValueType),则可以使用更有效的编译时强制转换:

double convertedTop = (double)top;

要回答这个问题,top.ToString()是文化敏感的。
你也需要通过CultureInfo.InvariantCulture
Nullable<T>不会提升ToString(IFormatProvider),所以你需要在Value上这样做,并显式地处理null