当有人将带有后缀解析的字符串传递给decimal
时失败。
decimal testValue;
decimal.TryParse("5M", NumberStyles.Number, CultureInfo.CurrentCulture, out testValue)
解析后将返回false
。
为什么TryParse
在传入带后缀的字符串时会失败?
答案 0 :(得分:3)
因为Decimal.TryParse
does not support it。
根据style的值,s参数可能包含以下元素:
[WS] [$] [符号] [数字,]数字[.fractional位数] [E [登录]位数] [WS]
方括号([和])中的元素是可选的。下表描述了每个元素。
ws
:可选的空格。如果样式包含NumberStyles.AllowLeadingWhite标志,则空格可以出现在s的开头。如果style包含NumberStyles.AllowTrailingWhite标志,它可以出现在s的末尾。
$
:特定于文化的货币符号。它在字符串中的位置由提供程序参数的IFormatProvider.GetFormat方法返回的NumberFormatInfo对象的NumberFormatInfo.CurrencyNegativePattern或NumberFormatInfo.CurrencyPositivePattern属性定义。如果style包含NumberStyles.AllowCurrencySymbol标志,则货币符号可以出现在s中。
sign
:可选标志。
digits
:一系列数字,范围从0到9。
.
:特定于文化的小数点符号。
fractional-digits
:一系列数字,范围从0到9。
答案 1 :(得分:0)
因为无法解析您的字符串而不删除M
部分。并且NumberStyles
都没有这样的功能。
我可以向Replace
建议您的M
空字符串,但这只会解决您的情况,它不会成为一般解决方案。< / p>
decimal testValue;
decimal.TryParse("5M".Replace("M", ""), NumberStyles.Number,
CultureInfo.CurrentCulture, out testValue);
real-type-suffix 指定数字类型。它向C#编译器传授数字文字类型的含义。在字符串中,它表示 nothing 。这只是另一个角色。