如果我执行以下操作:
string teststring = "12,2,2,2";
decimal testdecimal;
decimal.TryParse(teststring, out testdecimal)
这有效,而testdecimal最终为12222。
这种合理/逻辑无法解析吗?我很惊讶地看到它起作用并且很好奇它背后的逻辑是什么允许这个。
答案 0 :(得分:6)
默认情况下,TryParse()
允许您所在国家/地区,
的群组分隔符。
要防止这种情况发生,请传递不包含NumberStyles
的{{1}}。
默认为:
NumberStyles.AllowThousands
答案 1 :(得分:3)
这是因为数字组分隔符。在处理货币类型时,使用一千个分隔符是很常见的。 Decimal.TryParse将逗号视为千位分隔符并无论如何都要解析它。但是,您必须注意此方法对文化敏感。例如,如果当前文化设置为土耳其语,则TryParse不会成功,因为土耳其语,
中的小数点不是千位分隔符。
var d1 = Decimal.Parse("1,23,25"); //parse is successful
Thread.CurrentThread.CurrentCulture = new CultureInfo("tr");
d1 = Decimal.Parse("1,23,45"); //throws exception
答案 2 :(得分:2)
您的文化设置有,
作为千位分隔符。由于千位分隔符纯粹用于视觉提示,并且不提供有关数字的任何重要信息,decimal.TryParse
只是忽略了数千个分隔符。
答案 3 :(得分:1)
这是因为Decimal解析的千位分隔符。如果你想禁止千位分隔符,你可以删除那个标志,如下所示:
Decimal.Parse("12,2,2,2", NumberStyles.Number ^ NumberStyles.AllowThousands)
这将抛出InvalidFormatException