3

我想找出货币格式数据中存在的货币符号。

例如,输入字符串 = $56.23

public class FormatConverter 
{
    private CultureInfo _cultureInfo;

    public void UpdateCultureInfo()
    {
        Thread.CurrentThread.CurrentCulture.ClearCachedData();
        var thread = new Thread(
            s => _cultureInfo = Thread.CurrentThread.CurrentCulture);

        thread.Start();
        thread.Join();
    }

    Bool TryParseCurrencySymbolAndValue(string input, out string CurrencySymbol,
                                        out double value)
    {
        if(_cultureInfo == null)
            UpdateCultureInfo();
        try{

        // Convert Currency data into double
        value = Double.Parse(input, NumberStyles.Number | NumberStyles.AllowCurrencySymbol);
        // How to extract Currency Symbol?
            CurrencySymbol = "$";
            return true;
        }
        catch(Exception ex){ /* Exception Handling */}
        return false;
    }
}

我想分别从字符串和 56.23 中提取“$”符号,然后我想将 CultureInfo 应用于 56.23 为法语格式。输出应该是 56,23 美元。

在某些情况下,输入可能是“欧元符号”或输入字符串开头或结尾的某些其他货币符号。

我知道如何将数字部分转换为 CurrentCulture。我不知道如何从字符串中提取货币符号。

4

3 回答 3

6

听起来您已经知道如何将字符串解析为数字类型(如果我错了,请纠正我)。double我建议您在示例中使用,decimal但这是您的选择。

要获取货币符号,您可以使用简单的正则表达式

Regex ex = new Regex(@"\p{Sc}");
CurrencySymbol = ex.Match(input).Value;

我希望这会有所帮助。

于 2012-07-12T23:32:52.193 回答
1

还请查看此链接,以了解您可以找到和/或使用 IndexOf [IndexOf String Examples][1] 的许多不同方式。

问题是格式是否总是将 $ 作为第一个字符..?如果答案是肯定的,无论 USC 还是外币,都使用 String.IndexOf 方法

String.IndexOf("$")

这是您可以查看的编码示例

using System;

class Program
{
    static void Main()
    {
    // A.
    // The input string.
    const string s = "Tom Cruise is an Idiot he should pay $54.95.";

    // B.
    // Test with IndexOf.
    if (s.IndexOf("$") != -1)
    {
        Console.Write("string contains '$'");
    }
    Console.ReadLine();
    }
}

输出

字符串包含'$'

于 2012-07-12T22:27:49.950 回答
-1

你能试试吗?

float curSymbol;
bool isValid = float.TryParse(curValue, 
    NumberStyles.Currency,
    CultureInfo.GetCultureInfo("en-US"), out curSymbol);

获取 curSymbol。:) 一定要使用符号传递货币值:)

于 2012-07-12T22:29:37.450 回答