Как правильно удалить отображаемые валюты в разных культурах и убрать конечные нули?

1

Сценарий:

Шаг 1: получить десятичное значение
Шаг 2. Использование информации о культуре для отображения соответствующей валюты
Шаг 3: Результаты:

"$ 100.0000"
"£ 24,0340"
"11,0400 €"

Шаг 4: Используйте триммер для £ и $, где символы перед номерами:

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

Вывод:
"$ 100"
"£ 24,034"
"11,0400 €"

Если нули или точка в конце концов, это просто, но тогда он ломается, когда другой символ в конце концов в случае € культуры.

Какой был бы лучший способ удалить завершающие нули из разных строк, не выполняя сложную работу по манипулированию строками? Является ли это даже правильным способом, я это делаю?

  • 0
    Что случилось с исходным десятичным значением?
  • 0
    Сначала удалите символы валюты - на обоих концах, затем обрежьте пробелы на обоих концах, затем обрежьте десятичные дроби с правой стороны. Вы не можете сделать это все сразу, только шаг за шагом.
Показать ещё 6 комментариев
Теги:

2 ответа

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

Источники: Ссылка 1, Ссылка 2

Ещё вопросы

Сообщество Overcoder
Наверх
Меню