我在使用decimal.parse将字符串转换为十进制值时遇到一些问题。 这是我的代码行:
fixPrice = decimal.Parse(mItemParts.Groups["price"].Value.Replace("$", "").Replace(" ", "").Replace("usd", ""));
我尝试转换的价值是:'$ 779.99'
然后,一旦解析到十进制,我得到这个值:77999。
我想得到779.99而不是77999。 在此先感谢Laziale
正则表达式包括:“@”\ [^ \“”] +?)\“”[^〜] +?\] +?src = \“”(?[^ \“”] +?)\“ “[^>] +标题= \” “([^ \” “] +?\?)” “[^〜] +价格\”“>?(?[^ \<] +) \< [^〜] + \(?[^ \<] +)\
答案 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);