小数。 解析字符串,后缀为减号

decimal decimalVal; Decimal.TryParse("123-", out decimalVal); Console.WriteLine(decimalVal); // -123 

为什么“123-”字符串以这种方式解析?

Decimal.TryParse方法默认使用NumberStyles.Number解析输入。 NumberStyles.Number包括NumberStyles.AllowTrailingSign 。

Decimal.TryParse方法(String,Decimal)

[…]
使用NumberStyles.Number样式解释参数s。
[…]

Number表示使用AllowLeadingWhite,AllowTrailingWhite,AllowLeadingSign,AllowTrailingSign,AllowDecimalPoint和AllowThousands样式。 这是一种复合数字样式。

AllowTrailingSign指示数字字符串可以具有尾随符号。 有效的尾随符号字符由NumberFormatInfo.PositiveSign和NumberFormatInfo.NegativeSign属性确定。

默认情况下使用NumberStyles.Number枚举器:

指示使用AllowLeadingWhite,AllowTrailingWhite,AllowLeadingSign,AllowTrailingSign,AllowDecimalPoint和AllowThousands样式。 这是一种复合数字样式

http://msdn.microsoft.com/en-us/library/system.globalization.numberstyles.aspx

NumberNegativePattern仅用于字符串输出,但在解析时会被忽略。 对于解析,使用另一个参数: NumberStyles

在您的示例中, Convert.ChangeType路由到decimal.Parse ,因此如果您直接使用了正确的重载,则可以指定不允许尾随符号:

 var result = decimal.Parse("123-", NumberStyles.Number & ~NumberStyles.AllowTrailingSign); // will throw an exception 

这是Decimal.Parse的可接受格式。 Parse方法的style选项允许前导和尾随符号。

阅读更多: http : //msdn.microsoft.com/en-us/library/91fwbcsb.aspx