Подтвердить что ты не робот

Отформатируйте двойное значение, например, валюту, но без знака валюты (С#)

Я передаю текстовое поле строковое значение, показывающее баланс, который нужно отформатировать следующим образом:

###,###,###,##0.00

Я мог бы использовать value.ToString( "c" ), но это помещало бы знак валюты перед ним.

Любая идея, как я буду манипулировать строкой перед загрузкой текстового поля для достижения вышеуказанного форматирования?

Я пробовал это без успеха:

String.Format("###,###,###,##0.00", currentBalance);

Большое спасибо,

4b9b3361

Ответ 1

string forDisplay = currentBalance.ToString("N2");

Ответ 2

Если форматирование валюты дает вам именно то, что вы хотите, клонируйте a NumberFormatInfo с и установите для свойства CurrencySymbol значение "". Вы должны проверить, что он обрабатывает отрицательные числа так же, как вы, а также, конечно.

Например:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat;
        nfi = (NumberFormatInfo) nfi.Clone();

        Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
        nfi.CurrencySymbol = "";
        Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
    }
}

Другой вариант - использовать пользовательскую строку числового формата, конечно - зависит от того, хотите ли вы точно отразить то, как будет выглядеть валюта, просто без символа или контролировать точное позиционирование цифр.

Ответ 3

Вы пробовали:

currentBalance.ToString("#,##0.00");

Это длинный эквивалент:

currentBalance.ToString("N2");

Ответ 4

string result = string.Format( "{0: N2}", значение);//Для результата вроде ### ### ##. ##

Ответ 5

Вы можете сделать это с помощью разделителя групп и разделителя раздела, например:

currentBalance.ToString("#,0.00;(#,0.00)");

Это не учитывает отклонения в культуре, такие как ответ от @JonSkeet, но это имитирует десятичное место, округление, разделение по тысячам и обработку отрицательных чисел, которые формируют формат валюты в национальной валюте США, используя одну строку пользовательского формата.

.NET Fiddle Demo

Ответ 6

CultureInfo cultureInfo = new CultureInfo("en-US");
cultureInfo.NumberFormat.CurrencySymbol = "Rs.";

Thread.CurrentThread.CurrentCulture = cultureInfo;
decimal devimalValue = 3.45M;
this.Text = devimalValue.ToString("C2"); //Rs.3.45

Ответ 7

Это может быть излишним, но оно округляет, форматирует...

@helper TwoDecimalPlaces(decimal? val)
{
    decimal x = 0;
    decimal y = 0;
    string clas = "text-danger";
    if (val.HasValue)
    {
        x = (decimal)val;
        if (val > 0)
        {
            clas = "";
        }
    }
    y = System.Math.Round(x, 2);
    IFormatProvider formatProvider = new System.Globalization.CultureInfo(string.Empty);
    <span class="@clas">@string.Format("{0:N2}", y)</span>
}

Ответ 8

Это простое решение работает для меня с американской валютой.

Если не нужна поддержка международной валюты, используйте это и замените $символом (-ами) валюты, который нужно удалить:

// for USD
string result = currentBalance.ToString("C").Replace("$", "")

или

// for EUR
string result = currentBalance.ToString("C").Replace("€", "")