Форматирование чисел. Как указать динамичную точность дробной части, в зависимости от количества знаков?
Требуется отобразить число с разделителем " " в разрядах, знак дробной части брать от культуры, а цифры в дробной части нужно отображать до 2х знаков И скрывать нули
Для форматирования пользователя документацией https://learn.microsoft.com/ru-ru/dotnet/standard/base-types/standard-numeric-format-strings
Выбрал для задачи формат "N", но он не убирает лишние нули в конце. Если указать "N2", то будет округлять до 2х знаков и будет отображать 12 345,50
Как можно избавиться от лишних нулей в конце?
Console.WriteLine(BalanceFormat(12345.56m, "ru"));
Console.WriteLine(BalanceFormat(12345.5m, "ru"));
Console.WriteLine(BalanceFormat(12345m, "ru"));
Console.WriteLine(BalanceFormat(12345.56m, "en"));
string BalanceFormat(decimal price, string locale)
{
var cultureFormat = new CultureInfo(locale)
{ NumberFormat = { NumberGroupSeparator = "\u00A0" } };
return price.ToString("N", cultureFormat);
}
Ожидание:
12 345,56
12 345,5
12 345
12 345.56
Результат:
12 345,560
12 345,500
12 345,000
12 345.560
Ответы (1 шт):
Автор решения: StriBog
→ Ссылка
На вопрос ответил @AlexanderPetrov , использование формата "#,0.##" вместо "N"
Console.WriteLine(BalanceFormat(12345.56m, "ru"));
Console.WriteLine(BalanceFormat(12345.5m, "ru"));
Console.WriteLine(BalanceFormat(12345m, "ru"));
Console.WriteLine(BalanceFormat(12345.56m, "en"));
string BalanceFormat(decimal price, string locale)
{
var cultureFormat = new CultureInfo(locale)
{ NumberFormat = { NumberGroupSeparator = "\u00A0" } };
return price.ToString("#,0.##", cultureFormat);
}
Результат:
12 345,56
12 345,5
12 345
12 345.56