Отформатируйте двойное значение, например валюту, но без знака валюты (C #) - PullRequest
48 голосов
/ 26 июня 2009

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

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

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

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

Я попробовал это, но безуспешно:

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

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

Ответы [ 8 ]

62 голосов
/ 26 июня 2009

Если форматирование валюты дает именно то, что вам нужно, клонируйте 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));
    }
}

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

55 голосов
/ 26 июня 2009
string forDisplay = currentBalance.ToString("N2");
9 голосов
/ 26 июня 2009

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

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

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

currentBalance.ToString("N2");
5 голосов
/ 20 октября 2010

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

3 голосов
/ 11 марта 2015

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

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

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

.NET Fiddle Demo

2 голосов
/ 11 октября 2010
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
0 голосов
/ 26 мая 2017

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

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

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

или

// for EUR
string result = currentBalance.ToString("C").Replace("€", "")
0 голосов
/ 30 ноября 2016

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

@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>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...