【问题标题】:Convert decimal under non-english Windows非英文windows下转换十进制
【发布时间】:2013-02-20 06:38:44
【问题描述】:

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

所以这段代码的工作方式不对。

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

convertedTop 是 80000 但应该是 80.0

【问题讨论】:

    标签: c# .net parsing invariantculture


    【解决方案1】:

    不要那样做。

    您的代码效率极低。

    你应该把它改成

    double convertedTop = Convert.ToDouble(top);
    

    如果top 的编译时间类型是decimaldecimal?(与objectIConvertibleValueType 相对),您可以使用更高效的编译时间演员:

    double convertedTop = (double)top;
    

    要回答这个问题,top.ToString() 是对文化敏感的。
    您还需要在那里传递 CultureInfo.InvariantCulture
    Nullable<T> 不会提升 ToString(IFormatProvider),因此您需要在 Value 上执行此操作并明确处理 null

    【讨论】:

    • 谢谢!你能解释一下 (double) 和 Convert.ToDouble() 之间的区别吗?
    • @Peretz: (double) 是编译时转换。在对象上使用时,只能进行拆箱转换。 blogs.msdn.com/b/ericlippert/archive/2009/03/19/…Convert.To*() 是复杂的方法,本质上是对参数类型执行 switch() 并根据需要进行转换。
    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    相关资源
    最近更新 更多