2016-03-04 99 views
1

$232,680.00得到十进制值的最佳方法是否可能没有正则表达式。

而且这也不行 -

decimal.TryParse(Response.assess_market_value, NumberStyles.Currency, CultureInfo.InvariantCulture, out marketTotalValue); 
+1

到底是什么'Response.assess_market_value'? – HimBromBeere

回答

5

您可以结合AllowCurrencySymbol, AllowDecimalPoint and AllowThousands styles和使用具有$作为CurrencySymbolen-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文化完全适合您的字符串,因为它具有.作为小数点分隔符和,作为千位分隔符。

+0

使用'NumberStyles.Currency'(而不是'NumberStyles.AllowDecimalPoint'和'NumberStyles.AllowThousands')与'NumberStyles.AllowCurrencySymbol'相结合可以说是更干净。 – Rik

+1

@Rik'货币'_already_包含'AllowCurrencySymbol',因此使用它将会是多余的。只用'货币'就足够了。 –

1

有关于:

decimal.Parse("$232,680.00", NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"))