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

为什么“123-”字符串会这样解析?

4

4 回答 4

12

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 属性确定。

于 2013-06-17T12:57:07.330 回答
1

NumberStyles.Number 枚举器默认使用:

指示使用 AllowLeadingWhite、AllowTrailingWhite、AllowLeadingSign、AllowTrailingSign、AllowDecimalPoint 和 AllowThousands 样式。这是一个合数样式

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

于 2013-06-17T13:01:50.410 回答
1

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

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

var result = decimal.Parse("123-", NumberStyles.Number & ~NumberStyles.AllowTrailingSign); // will throw an exception
于 2018-10-23T13:52:12.277 回答
0

这是Decimal.Parse. 该方法的style选项Parse允许使用前导和尾随符号。

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

于 2013-06-17T12:56:38.660 回答