decimal decimalVal;
Decimal.TryParse("123-", out decimalVal);
Console.WriteLine(decimalVal); // -123
为什么“123-”字符串会这样解析?
decimal decimalVal;
Decimal.TryParse("123-", out decimalVal);
Console.WriteLine(decimalVal); // -123
为什么“123-”字符串会这样解析?
Decimal.TryParse 方法默认使用NumberStyles.Number解析输入。NumberStyles.Number包括NumberStyles.AllowTrailingSign。
Decimal.TryParse 方法(字符串,十进制)
[...]
参数 s 使用 NumberStyles.Number 样式解释。
[...]
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
. 该方法的style
选项Parse
允许使用前导和尾随符号。