我试图从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”所以我认为没有理由得到格式异常。有什么想法吗?
答案 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 = ","});