Ответ 1
string forDisplay = currentBalance.ToString("N2");
Я передаю текстовое поле строковое значение, показывающее баланс, который нужно отформатировать следующим образом:
###,###,###,##0.00
Я мог бы использовать value.ToString( "c" ), но это помещало бы знак валюты перед ним.
Любая идея, как я буду манипулировать строкой перед загрузкой текстового поля для достижения вышеуказанного форматирования?
Я пробовал это без успеха:
String.Format("###,###,###,##0.00", currentBalance);
Большое спасибо,
string forDisplay = currentBalance.ToString("N2");
Если форматирование валюты дает вам именно то, что вы хотите, клонируйте 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));
}
}
Другой вариант - использовать пользовательскую строку числового формата, конечно - зависит от того, хотите ли вы точно отразить то, как будет выглядеть валюта, просто без символа или контролировать точное позиционирование цифр.
Вы пробовали:
currentBalance.ToString("#,##0.00");
Это длинный эквивалент:
currentBalance.ToString("N2");
string result = string.Format( "{0: N2}", значение);//Для результата вроде ### ### ##. ##
Вы можете сделать это с помощью разделителя групп и разделителя раздела, например:
currentBalance.ToString("#,0.00;(#,0.00)");
Это не учитывает отклонения в культуре, такие как ответ от @JonSkeet, но это имитирует десятичное место, округление, разделение по тысячам и обработку отрицательных чисел, которые формируют формат валюты в национальной валюте США, используя одну строку пользовательского формата.
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
Это может быть излишним, но оно округляет, форматирует...
@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>
}
Это простое решение работает для меня с американской валютой.
Если не нужна поддержка международной валюты, используйте это и замените $символом (-ами) валюты, который нужно удалить:
// for USD
string result = currentBalance.ToString("C").Replace("$", "")
или
// for EUR
string result = currentBalance.ToString("C").Replace("€", "")