Отформатировать числа
От: Kaifa Россия  
Дата: 12.07.19 10:39
Оценка:
Потребовалось вдруг. Пробелы буду обозначать процентами. в общем надо так:

%123,456% -- для 123.456
%%12,3456 -- для 12.3456
1234,56%% -- для 1234.56

в общем запятая на одном месте. как это можно написать? на культуру пофиг.
Re: Отформатировать числа
От: Буравчик Россия  
Дата: 12.07.19 11:21
Оценка:
Здравствуйте, Kaifa, Вы писали:

K>Потребовалось вдруг. Пробелы буду обозначать процентами. в общем надо так:


K>%123,456% -- для 123.456

K>%%12,3456 -- для 12.3456
K>1234,56%% -- для 1234.56

K>в общем запятая на одном месте. как это можно написать? на культуру пофиг.


Нужно вставить несколько начальных пробелов, затем вывести число обычным способом.
Количество начальных пробелов легко посчитать исходя из длины целой части и места, выделенного под целую часть.
Best regards, Буравчик
Re[2]: Отформатировать числа
От: Kaifa Россия  
Дата: 12.07.19 13:42
Оценка: :)
Б>Нужно вставить несколько начальных пробелов, затем вывести число обычным способом.
Б>Количество начальных пробелов легко посчитать исходя из длины целой части и места, выделенного под целую часть.

через жопу как-то:

            decimal fractionX = Math.Truncate((point.X - Math.Truncate(point.X)) * 10000);
            decimal fractionY = Math.Truncate((point.Y - Math.Truncate(point.Y)) * 10000);
            return string.Format("X: {0, 4},{1, -4} Y: {2, 4},{3, -4}",
                Math.Truncate(point.X), (fractionX != 0) ?
                    string.Concat(new string('0', (int)(3 - Math.Truncate(Math.Log10((double)fractionX)))),
                    fractionX.ToString(CultureInfo.InvariantCulture).TrimEnd('0'))
                    : "0",
                Math.Truncate(point.Y), (fractionY != 0) ?
                    string.Concat(new string('0', (int)(3 - Math.Truncate(Math.Log10((double)fractionY)))),
                        fractionY.ToString(CultureInfo.InvariantCulture).TrimEnd('0'))
                    : "0");
Re[3]: Отформатировать числа
От: Mystic Artifact  
Дата: 12.07.19 13:49
Оценка:
Здравствуйте, Kaifa, Вы писали:

Полагаю, подразумевалось что-то в духе:

string fmt = "Value: {0,-" + fieldWidth.ToString() + "}";
foreach (decimal number in numbers)
{
   decPosition = number.ToString().IndexOf(decimalSeparator);
   if (decPosition == -1) decPosition = number.ToString().Length;

   string value = String.Format("{0}{1}", 
                  new String(' ', intDigits - decPosition), number);

   Console.WriteLine(fmt, value);
}


Это за минуту нагуглено тут:
https://blogs.msdn.microsoft.com/bclteam/2011/05/15/aligning-numbers-on-the-decimal-separator-ron-petrusha/
Re: Отформатировать числа
От: Mihas  
Дата: 12.07.19 13:49
Оценка:
Здравствуйте, Kaifa, Вы писали:

K>как это можно написать?

Я, честно говоря, не понял задачу. Но на всякий случай напомню, что для ToString() можно написать свою реализацию IFormatProvider.
Re: Отформатировать числа
От: Ночной Смотрящий Россия  
Дата: 14.07.19 22:20
Оценка:
Здравствуйте, Kaifa, Вы писали:

K>в общем запятая на одном месте. как это можно написать? на культуру пофиг.


$"{d,4:0}{d - Math.Floor(d):.####}".PadRight(9)
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Отредактировано 14.07.2019 22:28 Ночной Смотрящий . Предыдущая версия .
Re: Отформатировать числа
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 14.07.19 22:24
Оценка:
Здравствуйте, Kaifa, Вы писали:

K>%123,456% -- для 123.456

K>%%12,3456 -- для 12.3456
K>1234,56%% -- для 1234.56

K>в общем запятая на одном месте. как это можно написать? на культуру пофиг.


У вас там есть понятия ширины вывода, выравнивания, точности, символов заполнения? В той же сишечке всё элементарно в форматной строке задается, т.ч. и в рантайме
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.