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

7 浏览
0 Comments

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

场景:

步骤1: 获取十进制值

步骤2: 使用区域信息显示正确的货币

步骤3: 结果:

"$100.0000"

"£24.0340"

"11,0400 €"

步骤4: 在符号前的£和$中使用trimend去除0:

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

输出:

"$100"

"£24.034"

"11,0400 €"

如果末尾有零或小数点,这很简单,但是当其他字符在欧元区域的末尾时,它就会出错。

在不进行复杂的字符串操作的情况下,如何最好地从不同的字符串中去除尾部的零?我现在的方法是否正确?

0
0 Comments

问题的原因是无法同时使用NumberFormatInfo类来获取正确的文化对象并去除尾随的零。为了实现我所需的输出,必须对字符串进行一些操作。

解决方法是进行复杂的字符串操作。首先,使用ManipulateCurrencyString方法对金额进行格式化,然后使用GetCultureByCurrencyType方法获取与货币类型和国家文化相关的文化对象。

ManipulateCurrencyString方法用于正确处理字符串中的尾随零。如果最后一个字符是数字,则去除字符串末尾的零和小数点。如果最后一个字符是货币符号,则去除字符串末尾的零、小数点和逗号,并将数字和货币符号用空格分隔开。

最后,在HtmlHelper的扩展方法LocalizeJackpots中,通过获取当前的HttpContext并从Cookie中获取国家文化,将金额按照获取的文化对象进行格式化,并返回处理后的字符串。

代码如下:

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));
}
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;
}

通过以上方法,可以正确地去除不同文化中的显示货币和尾随零。

0
0 Comments

如何正确移除不同文化中的显示货币符号和尾随零?

在开发过程中,我们可能需要从数字中移除货币符号和尾随零。下面的代码片段展示了如何使用CurrencySymbol获取当前的货币符号,并从输入中移除非数字字符,得到一个Double类型的数值结果。然后,根据当前的货币符号,可以选择将货币符号附加或者前置到输入中。

Char currentCurrency = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol.ToCharArray()[0];
// 获取你的Double数值
Double result = null;
try {
    Regex regexObj = new Regex(@"[^\d]");
    result = Convert.ToDouble(regexObj.Replace(input, ""));
} catch (ArgumentException ex) {
    // 正则表达式语法错误
}
Switch(currentCurrency){
  // 将你的货币符号附加或者前置到你的输入中
}

如果你需要改变线程的货币符号,可以使用下面的代码获取当前线程的货币符号:

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

以上代码片段来源于以下链接:

- [Link 1](https://stackoverflow.com/questions/844461)

- [Link 2](https://stackoverflow.com/questions/11363250)

通过以上代码和链接,你可以正确移除不同文化中的显示货币符号和尾随零。

0