decimal decimalVal;
Decimal.TryParse(\"123-\", out decimalVal);
Console.WriteLine(decimalVal); // -123
Why do \"123-\" string parsed this way?
The NumberNegativePattern is only used for string output, but ignored when parsing.
For parsing, another parameter is used: NumberStyles
.
Convert.ChangeType
routes to decimal.Parse
in your example, so if you directly used the correct overload, you can specify to not allow a trailing sign:
var result = decimal.Parse("123-", NumberStyles.Number & ~NumberStyles.AllowTrailingSign); // will throw an exception