如何正确删除不同文化中的显示货币并删除尾随的零?
如何正确删除不同文化中的显示货币并删除尾随的零?
场景:
步骤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 €"
如果末尾有零或小数点,这很简单,但是当其他字符在欧元区域的末尾时,它就会出错。
在不进行复杂的字符串操作的情况下,如何最好地从不同的字符串中去除尾部的零?我现在的方法是否正确?
问题的原因是无法同时使用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; }
通过以上方法,可以正确地去除不同文化中的显示货币和尾随零。
如何正确移除不同文化中的显示货币符号和尾随零?
在开发过程中,我们可能需要从数字中移除货币符号和尾随零。下面的代码片段展示了如何使用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)
通过以上代码和链接,你可以正确移除不同文化中的显示货币符号和尾随零。