小数。 解析字符串,后缀为减号
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