小数.解析字符串,后面加一个负号

本文关键字:一个 字符串 小数 | 更新日期: 2023-09-27 18:18:48

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

为什么"123-"字符串这样解析?

小数.解析字符串,后面加一个负号

小数。TryParse方法用NumberStyles解析输入。默认为号码。NumberStyles。Number包括NumberStyles.AllowTrailingSign.

小数。TryParse (String, Decimal)

[…]
参数s使用NumberStyles进行解释。许多风格。
[…]

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

AllowTrailingSign 指示数字字符串可以有尾随符号。有效的尾随符号字符由NumberFormatInfo决定。PositiveSign和NumberFormatInfo。版本属性。

默认使用数字枚举器:

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

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