Деление числа по разрядам

225
04 января 2018, 20:22

Доброго времени суток всем! Недавно столкнулся с такой проблемой: необходимо разделить число типа float по разрядам, пример: "1590270,2018" -> "1 590 270,2018". Попытался решить задачу известными мне способами. Вышло нереально много строк кода. И вообще весь код - костыль. Деление по разрядам нужно только для вывода на экран, никакой логической роли это не играет. Язык программирования c#, среда разработка Visual Studio, под WPF. Вроде бы мелочь, а додуматься никак не могу, помогите решить задачу грамотным путём.

Answer 1

В качестве альтернативы, можно использовать стандартный формат N:

float f = 1590270.2018f;
string s = f.ToString("N3", CultureInfo.GetCultureInfo("ru-RU"));

https://ideone.com/lhUMSJ

С другой стороны, если приложение запущено на нерусской системе, то логичнее показывать формат в соответствии с настройками системы. Тогда вы можете не указывать CultureInfo:

string s = f.ToString("N3");

и строка будет отформатирована в соответствии с правилами языка, выбранного пользователем. Для русского и французского это будет 12 345 680,000, для немецкого — 12.345.680,000, для английского — 12,345,680.000.

Заметьте, что для больших чисел у float не хватает точности для показа нужного количества знаков после запятой.

Если вам нужно выводить все знаки после запятой, работать через N нельзя, т. к. при этом количество знаков после запятой либо нужно указывать вручную (и тогда выведутся нули), либо берётся по умолчанию. В этом случае у меня сработало вот так:

string s = f.ToString("#,0.##########", CultureInfo.GetCultureInfo("ru-RU"));

или соответственно

string s = f.ToString("#,0.##########");
Answer 2

Используйте класс NumberFormatInfo:

var format = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
format.NumberGroupSeparator = " ";
Console.WriteLine(1590270.2018m.ToString("#,0.00", format));

Пример

READ ALSO
Вывод строки перед и после

Вывод строки перед и после

Вtxt записана такие строки, к примеру

202
Проверка поля на наличие в нем определенного числа JS [требует правки]

Проверка поля на наличие в нем определенного числа JS [требует правки]

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

252
Как обрезать строку в jq? (не работает в ie11)

Как обрезать строку в jq? (не работает в ie11)

Есть функция, отлично работает во всех браузерах кроме ieподскажите что не так

335