从$232,680.00
获取十进制值的最佳方法是什么才有可能没有正则表达式。
这也行不通 -
decimal.TryParse(Response.assess_market_value, NumberStyles.Currency, CultureInfo.InvariantCulture, out marketTotalValue);
答案 0 :(得分:5)
您可以合并AllowCurrencySymbol
, AllowDecimalPoint
and AllowThousands
styles并使用$
作为CurrencySymbol
的文化,例如en-US
var s = "$232,680.00";
decimal d = decimal.Parse(s, NumberStyles.AllowCurrencySymbol |
NumberStyles.AllowDecimalPoint |
NumberStyles.AllowThousands,
CultureInfo.GetCultureInfo("en-US"));
或更简单的使用NumberStyles.Currency
而不是包含这些样式。
decimal d = decimal.Parse(s, NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"));
代码中的问题是InvariantCulture
有¤
(货币符号(U+00A4
))而不是$
CurrencySymbol
。如果您将InvariantCulture
更改为CultureInfo.GetCultureInfo("en-US")
,您的代码也会正常运行。
en-US
文化完全适合您的字符串,因为它有.
作为小数点分隔符,,
作为千位分隔符。
答案 1 :(得分:1)
有关于:
decimal.Parse("$232,680.00", NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"))