decimal.TryParse 返回 false

Posted

技术标签:

【中文标题】decimal.TryParse 返回 false【英文标题】:decimal.TryParse returns false 【发布时间】:2013-06-03 13:35:48 【问题描述】:

文本框中的输入字符串是 $10.00 。我打电话

decimal result;
var a = decimal.TryParse(text, NumberStyles.AllowCurrencySymbol, cultureInfo, out result);

cultureInfo 是已知的 (en-US)。为什么decimal.tryParse返回false?

谢谢。

【问题讨论】:

来自 MS 的外部资源,解释了如何解析包括样本在内的各种格式。 msdn.microsoft.com/en-us/library/9zbda557.aspx "AllowCurrencySymbol" 正如你所写的,它意味着只允许一个货币符号。 【参考方案1】:

问题是您允许货币符号本身,但您省略了正确解析它所需的其他属性(例如小数点)。您真正想要的是NumberStyles.Currency

decimal.TryParse("$10.00", NumberStyles.Currency, cultureInfo, out result);

【讨论】:

【参考方案2】:

试试这个,您需要在style 参数的值的按位组合中包含NumberStyles.Number

decimal result;
var a = decimal.TryParse(text, NumberStyles.Number | NumberStyles.AllowCurrencySymbol, cultureInfo, out result);

【讨论】:

【参考方案3】:

你也忘了允许小数点:

decimal result;
var enUS = new System.Globalization.CultureInfo("en-US");
var a = decimal.TryParse("$10.00", System.Globalization.NumberStyles.AllowCurrencySymbol | System.Globalization.NumberStyles.AllowDecimalPoint , enUS, out result);

Console.WriteLine(enUS);
Console.WriteLine(a);
Console.WriteLine(result);

【讨论】:

以上是关于decimal.TryParse 返回 false的主要内容,如果未能解决你的问题,请参考以下文章

decimal.TryParse和Convert.ToDecimal+try{} catch{}的性能比较

十进制数的正则表达式

如何解析带有欧元货币符号的数字字符串? [复制]

为啥 false && (false)?false:true 返回 true

为啥“[False, True] 中的 not(True)”返回 False?

我想返回一个 true 或 false 的值,但强制它在 3% 的时间里随机返回 false [重复]