在c#中将字符串转换为十进制

时间:2012-04-13 17:05:39

标签: c# asp.net visual-studio-2010 decimal

我在使用decimal.parse将字符串转换为十进制值时遇到一些问题。 这是我的代码行:

fixPrice = decimal.Parse(mItemParts.Groups["price"].Value.Replace("$", "").Replace(" ", "").Replace("usd", ""));     

我尝试转换的价值是:'$ 779.99'

然后,一旦解析到十进制,我得到这个值:77999。

我想得到779.99而不是77999。 在此先感谢Laziale

正则表达式包括:“@”\ [^ \“”] +?)\“”[^〜] +?\] +?src = \“”(?[^ \“”] +?)\“ “[^>] +标题= \” “([^ \” “] +?\?)” “[^〜] +价格\”“>?(?[^ \<] +) \< [^〜] + \(?[^ \<] +)\

4 个答案:

答案 0 :(得分:6)

我会使用Decimal.TryParse()

decimal parsedDecimal = 0;
string yourCurrency = "$779.99";
bool didParse = Decimal.TryParse(yourCurrency,
                                 NumberStyles.Currency,
                                 new CultureInfo("en-US"), out parsedDecimal);

if(didParse) {
    // Parse succeeded
}
else {
    // Parse failed
}

答案 1 :(得分:2)

传递您要解析的文化的CultureInfo实例。

CultureInfo继承自IFormatProvider

修改

以下是转化的示例

Decimal.Parse(yourValue, NumberStyles.AllowCurrencySymbol |
                         NumberStyles.AllowDecimalPoint   |
                         NumberStyles.AllowThousands,
              CultureInfo.InvariantCulture);

答案 2 :(得分:2)

您似乎是在'.'是组分隔符的文化中运行它,而','是小数点分隔符。要解决这个问题,请使用带有CultureInfo的Parse重载:

fixPrice = decimal.Parse(stringExpression, CultureInfo.InvariantCulture);

同时查看NumberStyles enum,这样您就不必担心货币符号了:

fixPrice = decimal.Parse(stringExpression, NumberStyles.Currency, new CultureInfo("en-US"));

答案 3 :(得分:1)

这对我有用:

string decStr = "$779.99";
CultureInfo ci = new CultureInfo("en-US");
decimal fixPrice = decimal.Parse(decStr, NumberStyles.Currency, ci);