当conversionType为十进制且输入为“40.00”时,如何使用Convert.ChangeType()

时间:2011-10-11 11:05:29

标签: c# .net generics decimal

我的意思是,我想转换它:

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

结果是十进制值“4000”

问题是转换调用是在xmlToObject Converter中的一个非常抽象的泛型方法中。我不想以编程方式添加许多不同的例外来正确转换。

问候克里斯

3 个答案:

答案 0 :(得分:41)

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

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

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

答案 1 :(得分:3)

转换很可能是使用将句点用作千位分隔符而非小数分隔符的文化来完成的。

转换值时指定文化:

Convert.ToDecimal(a, CultureInfo.InvariantCulture)

答案 2 :(得分:2)

以下代码

 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);