如何正确删除不同文化中的显示货币并删除尾随零?

时间:2014-07-19 16:24:05

标签: c#

情景:

第1步:获取小数值
第2步:使用文化信息显示正确的货币
第3步:结果:

“$ 100.0000”
“£24.0340”
“11,0400€”

第4步:对£和$使用trimend,其中符号在数字之前:

    input = input.TrimEnd("0".ToCharArray());
    input = input.TrimEnd(".".ToCharArray());

输出:
“$ 100”
“£24.034”
“11,0400€”

如果最后是零或点,那么它很简单,但是当其他字符结束时,它会在€culture文化的情况下中断。

在不对字符串操作执行复杂作业的情况下,从不同字符串中删除尾随零的最佳方法是什么?这是我正在做的这种方式吗?

2 个答案:

答案 0 :(得分:0)

使用CurrencySymbol获取当前货币:

Char currentCurrency = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol.ToCharArray()[0];

// Get your Double number,
Double result = null;

try {
    Regex regexObj = new Regex(@"[^\d]");
    result = Convert.ToDouble(regexObj.Replace(input, ""));
} catch (ArgumentException ex) {
    // Syntax error in the regular expression
}

Switch(currentCurrency){
  // Append or prepend your currency symbol to your input
}

如果您需要更改主题货币,请使用此代码获取当前主题货币符号:

System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol

资料来源: Link 1Link 2

答案 1 :(得分:0)

问题是你不能使用NumberFormatInfo类来获取正确的文化对象,同时跟踪零...所以如果你想要实现我需要的东西,你必须对字符串进行一些操作。

我想要的输出:

<强> “$ 10.2”
“£50.465”
“23,54€”

根据本地写入货币的标准。

我解决了复杂的字符串操作(也就是对字符串的一些工作)......

public static string LocalizeJackpots(this HtmlHelper html, decimal amount, byte currencyType)
{
    var httpContext = new HttpContextWrapper(HttpContext.Current);

    string countryCulture = httpContext.Request.Cookies["countryCulture"].Value;

    var culture = GetCultureByCurrencyType(currencyType, countryCulture);

    return ManipulateCurrencyString(amount.ToString("c", culture));
}

然后:

/// <summary>
        /// This is used to properly trail leading zeros with usage of NumberFormatInfo culture class later in string
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
private static string ManipulateCurrencyString(string input)
        {
            char lastCharacter = input.Substring(input.Length - 1, 1)[0];

            if (Char.IsNumber(lastCharacter))
            {
            // for currencies with symbol in front
            input = input.TrimEnd("0".ToCharArray()).TrimEnd(".".ToCharArray());
            }
            else
            {
            // for currencies with symbol in the end
            string symbol = input.Substring(input.Length - 1, 1);
            string number = input.Substring(0, input.Length - 2).TrimEnd("0".ToCharArray()).TrimEnd(".".ToCharArray()).TrimEnd(",".ToCharArray());

            input = number + " " + symbol;
            }

            return input;
        }