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

本文关键字:转换 十进制 字符串 | 更新日期: 2023-09-27 18:31:14

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

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

我尝试转换的值是:"$779.99"

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

我想得到 779.99 而不是 77999。提前感谢,拉齐亚尔

正则表达式包括:"@"''[^''"]+?)''"[^~]+?'']+?src=''"(?[^'''"'"]+?)''"[^>]+?title=''"(?[^'''"'"]+?)''"[^~]+?price''">(?[^''<]+?)''<[^~]+?''(?[^''<]+?)''

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

我会使用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
}

您似乎在区域性中运行它,其中 '.' 是组分隔符,',' 是小数分隔符。 若要解决此问题,请使用采用 CultureInformation 的 Parse 重载:

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

还要查看NumberStyles枚举,这样您就不必担心货币符号:

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

传递要从中解析的区域性的CultureInfo实例。

CultureInfo继承自IFormatProvider

编辑:

这是转换的示例

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

我有用:

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