Десятичная дробь. Строка анализа, добавленная знаком минус

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

Почему строка "123-" обрабатывается таким образом?

Ответ 1

Decimal.TryParse Method по умолчанию проверяет ввод NumberStyles.Number. NumberStyles.Number включает NumberStyles.AllowTrailingSign.

Decimal.TryParse Method (String, Decimal)

[...]
Параметр s интерпретируется с использованием стиля NumberStyles.Number.
[...]

Номер Указывает, что используются стили AllowLeadingWhite, AllowTrailingWhite, AllowLeadingSign, AllowTrailingSign, AllowDecimalPoint и AllowThousands. Это стиль составного номера.

AllowTrailingSign Указывает, что числовая строка может иметь завершающий знак. Допустимые знаковые символы знака определяются свойствами NumberFormatInfo.PositiveSign и NumberFormatInfo.NegativeSign.

Ответ 2

Обозреватель NumberStyles.Number используется по умолчанию:

Указывает, что используются стили AllowLeadingWhite, AllowTrailingWhite, AllowLeadingSign, AllowTrailingSign, AllowDecimalPoint и AllowThousands. Это стиль составного номера

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