【问题标题】:C# - can I parse back text that have already formatted to currency?C# - 我可以解析已经格式化为货币的文本吗?
【发布时间】:2012-12-15 22:17:22
【问题描述】:

这是将仅包含数字的文本格式化为 $ 货币的功能

private String GLOBALIZE_TEXT(String originalText)
{
    decimal parsed;
    CultureInfo myCultureInfo;
    string formattedText = "";

    //use try catch to prevent larger inputs
    try
    {
        parsed = decimal.Parse(originalText, CultureInfo.InvariantCulture);
        myCultureInfo = new CultureInfo("$");
        formattedText = string.Format(myCultureInfo, "{0:c}", parsed);
    }
    catch (Exception ignorethis)
    {
    }
    return formattedText;
}

现在正在使用:

String myString = "3821";
myString = GLOBALIZE_TEXT(myString);
//now my String becomes "$3,821.00"

问题是,我可以再次将“$3,821.00”解析回“3821”吗? 我需要将其解析回来,以便可以将其用作整数,其中“3821”可以由Convert.ToInt32("3821") 转换。 或者也许解析后的字符串也可以直接转换为字符串?

请告诉我你的意见。

【问题讨论】:

  • 与其在 Parse 周围包装异常处理程序,不如使用 TryParse 更容易: Decimal.TryParse("$1.00", Globalization.NumberStyles.Currency,
  • MessageBox.Show(int.Parse("$3,821.00", NumberStyles.Currency).ToString());
  • @spajce 您的代码仅在我的 CultureInfo 为“en-US”时才有效,即 $。但如果我把其他像“id-ID”这样的印尼盾,它就不会解析回来

标签: c# string parsing currency cultureinfo


【解决方案1】:

你可以试试:

double.Parse(myString, NumberStyles.Currency);

关于NumberStyles枚举的更多信息可以在on MSDN here找到,关于这个特定double.Parse方法的更多信息可以在on MSDN here找到。

【讨论】:

    【解决方案2】:

    也许最好问问你为什么需要这样做?您应该始终尝试以本机格式存储值。如果您需要从捕获或导入的字符串中执行此操作,那么我会使用正则表达式来删除它。

    Regular expression to remove any currency symbol from a string?

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多