Convert.ToDecimal抛出System.FormatExcept

时间:2016-10-07 08:28:42

标签: c# converter formatexception

我试图从xml文件解析一个2.25的值,是一个用“,”分隔的小数。

decimal hrsElapsed = Convert.ToDecimal(caseNode["hrsElapsed"].InnerText, new NumberFormatInfo() {NumberDecimalSeparator = ","})

但是,我得到System.FormatException。应用于其他字段的相同代码行不会抛出它。例如:

decimal hrsOrigEst = Convert.ToDecimal(caseNode["hrsOrigEst"].InnerText, new NumberFormatInfo() {NumberDecimalSeparator = ","});

我检查了caseNode[""].InnerText的实际值是什么“2.25”所以我认为没有理由得到格式异常。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

小数没有隐式小数分隔符,如果将小数转换为1,则字符串可能有。因此,您需要NumberFormatInfo / CultureInfo使用点作为小数点分隔符将字符串解析为decimal,f.e。 CultureInfo.InvariantCulture

decimal hrsElapsed = decimal.Parse(caseNode["hrsElapsed"].InnerText, CultureInfo.InvariantCulture);

现在您需要NumberFormatInfo / CultureInfo使用逗号作为decimal.ToString的小数点分隔符:

string hrsElapsedWithComma = hrsElapsed.ToString(new CultureInfo("de-DE")); // or another one that uses comma as decimal separator

答案 1 :(得分:0)

NumberFormatInfo为转换器提供了有关如何将字符串caseNode["hrsElapsed"]转换为小数的提示。因为你的字符串包含"。"而不是逗号,它无法解析它。

数据类型decimal没有数字小数分隔符的概念,只有它的字符串表示形式。

尝试删除NumberDecimalSeperator,当您将小数转换回字符串时,请改用它。

答案 2 :(得分:0)

decimal类型是数字类型,它本身没有任何格式。所以没有'小数由",#34;'分隔的小数。在C#中。有小数,并且有通过格式化小数创建的字符串。

您要提供给Convert.ToDecimal的格式是用于将字符串转换为小数的格式。由于您要转换的字符串使用句点,因此您应该使用格式。

然后使用逗号将该十进制数转换为表示形式,使用合适的格式将其转换为字符串。

        decimal hrsElapsed = Convert.ToDecimal("2.5", new NumberFormatInfo() {NumberDecimalSeparator = "."});
        string representationWithComma = hrsElapsed.ToString( new NumberFormatInfo() {NumberDecimalSeparator = ","});