2012-12-15 20 views
3

这是功能格式化包含数字只到$货币C# - 我可以解析已经格式化为货币的文本吗?

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")转换。 或者也许那个解析的字符串也可以直接转换为字符串?

请让我知道您的意见。

+0

而不是围绕Parse包装一个异常处理程序,您可能会发现它更容易使用TryParse:Decimal.TryParse(“$ 1.00”,Globalization.NumberStyles.Currency, –

+1

'MessageBox.Show(int.Parse(“$ 3,821.00”,NumberStyles .Currency).ToString());' – spajce

+0

@spajce你的代码只有在我的CultureInfo是“en-US”这个$时才起作用,但是如果我把其他的“id-ID”这个是印度尼西亚的Rp,它不会回到 –

回答

3

您可以尝试:在NumberStyles枚举

double.Parse(myString, NumberStyles.Currency); 

更多信息,可以发现on MSDN here多的信息在这个特定double.Parse方法可以发现on MSDN here

0

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

Regular expression to remove any currency symbol from a string?

+0

我同意,但处理货币的一个很好的方法是钱类。http://csharpmoney.codeplex.com – johan