将字符串转换为十进制数

5
在C#中,我正在尝试将一个字符串转换为十进制数。
例如,字符串是“(USD 92.90)”。
你可以使用Decimal.Parse函数将其解析为十进制数。
4个回答

21

我这里的假设是您正在尝试解析的字符串是实际货币价值。

CultureInfo c = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
c.NumberFormat.CurrencyNegativePattern = 14; // From MSDN -- no enum values for this
c.NumberFormat.CurrencySymbol = "USD";

decimal d = Decimal.Parse("(USD 92.90)", NumberStyles.Currency, c);

1
+1,我不知道可以传递NumberStyles。不过我仍然会使用TryParse(我注意到它接受相同的参数)... - Philip Wallace
我喜欢这个。但是如果货币改变了呢? - LB.
1
@LB:如果你正在处理多种货币,我建议逐个解析它们。由于这些值本身并不能相互比较(例如,USD$15 != CAD$15),因此将它们全部放在一个数组中有点毫无意义。 - Jon Seigel

6

您可以先使用正则表达式提取数字部分,然后使用Decimal.TryParse解析子字符串。


1
首先,从字符串中获取数字。正则表达式\d+(.\d+)?可能会有所帮助。虽然如果该数字周围的字符始终相同,您可以使用子字符串。
然后在该字符串上使用Decimal.Parse(或Double.Parse)。

0

在解析字符串时,我总是更喜欢使用TryParse来避免因无效字符串而抛出异常:

        string str =  "(USD 92.90)";
        decimal result;
        if (Decimal.TryParse(str, out result))
        {
            // the parse worked
        }
        else
        {
            // Invalid string
        }

正如其他人所说,首先使用正则表达式提取仅包含数字部分的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接