【问题标题】:How to use Convert.ChangeType() when conversionType is decimal and input is "40.00"当conversionType为十进制且输入为“40.00”时如何使用Convert.ChangeType()
【发布时间】:2011-12-05 05:13:30
【问题描述】:

我的意思是,我想转换这个:

string a = "40.00";
Convert.ChangeType(a, typeof(decimal))

结果是“4000”的十进制值

问题是转换调用在 xmlToObject 转换器中的一个非常抽象的通用方法中。我不想以编程方式添加很多不同的异常来正确转换。

问候克里斯

【问题讨论】:

  • “40,00”转换正确吗?
  • 你们需要改变自己的文化……

标签: c# .net generics decimal


【解决方案1】:

在您当前的文化中,小数点可能不会由句点字符表示。

通常,在执行文化不变的转换时,最好将CultureInfo.InvariantCulture 指定为IFormatProvider 参数到method

(decimal) Convert.ChangeType(a, typeof(decimal), CultureInfo.InvariantCulture);

【讨论】:

    【解决方案2】:

    最有可能使用将句点用作千位分隔符而不是小数分隔符的区域性来完成转换。

    在转换值时指定文化:

    Convert.ToDecimal(a, CultureInfo.InvariantCulture)
    

    【讨论】:

      【解决方案3】:

      以下代码

       string s = "40.00";
       decimal d = (decimal)Convert.ChangeType(s, typeof(decimal));
      

      使 d = 40。这对我来说看起来不错。你到底是什么问题?

      编辑: 看来您可能对所使用的文化有疑问。 为转换执行此操作:

      string s = "40.00";
      decimal d = (decimal)Convert.ChangeType(s, typeof(decimal), CultureInfo.InvariantCulture);
      

      【讨论】:

      • 问题是,一如既往,. 并不总是小数点分隔符。
      • @DavidHeffernan 这是什么令人毛骨悚然的文化:/
      • 至少在俄语中,点是千位分隔符,小数分隔符是逗号:“1.000,1”。作为值分隔符';'被使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      相关资源
      最近更新 更多