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