【问题标题】:C# Is there a built-in function to convert a formatted String back to a Number?C# 是否有将格式化的字符串转换回数字的内置函数?
【发布时间】:2011-04-10 23:55:39
【问题描述】:

如何将格式化数字的字符串转换回数字?

  Decimal percent = 55.76;
  String strPercent = String.Format("{0:0.0}%", percent);
  Decimal dollars = 33.5;
  String strDollars = String.Format("{0:C}", dollars);

稍后再说,我想以数字形式返回百分比和美元价值。有没有使用 C# 和 asp.net 的内置方法?我知道如何使用 regex 和 String 函数,但我从 http://msdn.microsoft.com/en-us/library/ks098hd7(vs.71).aspx 读到了 Decimal.Parse() 函数。

是否有内置函数可以执行此操作?如果是,我该如何使用它?

【问题讨论】:

    标签: c# asp.net numbers format


    【解决方案1】:

    使用Decimal.Parse,您可以传递System.Globalization.NumberStyles 来控制字符串的解析方式。 这将使您可以轻松地将货币字符串转换回小数。 不幸的是,NumberStyles 不支持百分比,所以你仍然需要单独去掉百分比符号。

            Decimal percent = 55.76M;
            String strPercent = String.Format("{0:0.0}%", percent);
            Decimal dollars = 33.5M;
            String strDollars = String.Format("{0:C}", dollars);
    
            Decimal parsedDollars = Decimal.Parse(strDollars, NumberStyles.Currency);
    
            Decimal parsedPercent = Decimal.Parse(
                strPercent.Replace(
                    NumberFormatInfo.CurrentInfo.PercentSymbol,
                    String.Empty));
    

    请参阅NumberStyles documentation 了解更多信息。

    【讨论】:

    • 太棒了!非常感谢。那么这和使用 Convert.ToDecimal(StrDollars) 有什么区别呢?什么时候应该转换,什么时候应该使用 Parse?非常感谢!
    • Convert.ToDecimal 会将 null 转换为零,如果传递 null,则 Decimal.Parse 将抛出异常。我更喜欢使用 Decimal.Parse,并明确处理空参数。如果您的字符串可能为空或格式错误,您可以使用 Decimal.TryParse。此外,Convert.ToDecimal 不支持您最初要求的格式选项。我会坚持使用 Decimal.Parse 或 Decimal.TryParse,并完全避免 Convert.ToDecimal。
    【解决方案2】:

    int.Parse、double.Parse 等都是你的朋友。

    编辑:错过了标点符号部分。将重新调查并提出更好的建议。

    编辑 2:事实证明 int.Parse 实际上有一个重载来获取格式字符串:http://msdn.microsoft.com/en-us/library/c09yxbyt.aspx

    【讨论】:

    • 您可能必须先去掉百分比和美元符号。
    猜你喜欢
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多