从$232,680.00
得到十进制值的最佳方法是否可能没有正则表达式。
而且这也不行 -
decimal.TryParse(Response.assess_market_value, NumberStyles.Currency, CultureInfo.InvariantCulture, out marketTotalValue);
从$232,680.00
得到十进制值的最佳方法是否可能没有正则表达式。
而且这也不行 -
decimal.TryParse(Response.assess_market_value, NumberStyles.Currency, CultureInfo.InvariantCulture, out marketTotalValue);
您可以结合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
文化完全适合您的字符串,因为它具有.
作为小数点分隔符和,
作为千位分隔符。
使用'NumberStyles.Currency'(而不是'NumberStyles.AllowDecimalPoint'和'NumberStyles.AllowThousands')与'NumberStyles.AllowCurrencySymbol'相结合可以说是更干净。 – Rik
@Rik'货币'_already_包含'AllowCurrencySymbol',因此使用它将会是多余的。只用'货币'就足够了。 –
有关于:
decimal.Parse("$232,680.00", NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"))
到底是什么'Response.assess_market_value'? – HimBromBeere