Форматировать пользовательскую числовую строку с фиксированным количеством символов

Мне нужно преобразовать любое число в фиксированный формат с фиксированным количеством символов. Значит 1500 и -1,5 или 0,025 должны иметь одинаковую длину. Я также должен указать формат в этой форме: Format = "{???}";

Когда я набираю Format = "{0000}";, я могу ограничить 1500 до «1500», но -1,5 -> «-0001,5» означает, что у меня слишком много чисел после точки.

Место отрицательного знака можно сделать с помощью Format = "{ 0.0;-0.0; 0.0}".

Как я могу исправить количество чисел для разных чисел?

Длина строки не имеет значения, главное, чтобы она была одинаковой длины.

Примеры:

1500 ->    " 1500.000" or "     1500"
-1500 ->   "-1500.000" or "-    1500" or "    -1500"
1.5  ->    "    1.500" or "      1.5"
-0.25->    "   -0.250" or "-    0.25"
0.00005 -> "    0.000" or "        0"
150000->   " 150000.0" or "   150000"
15000000   " 15000000"

Редактировать:

Я хочу отформатировать ось Y диаграммы. Я не могу использовать что-то вроде value.ToString("???"), мне нужно использовать chartArea.AxisY.LabelStyle.Format = "{???}";


person fedab    schedule 03.12.2013    source источник
comment
Я не думаю, что это может быть достигнуто только с помощью строк формата. Возможно, вам придется поиграть с Math.Round и String.PadLeft   -  person Corak    schedule 03.12.2013


Ответы (3)


Почему бы не использовать форматирование? «F3» заставляет 3 цифры после запятой, а PadLeft обеспечивает общую длину

  Double value = 1500.0;
  // 3 digits after decimal point, 9 characters length
  String result = value.ToString("F3").PadLeft(9, ' ');

         0 ->     0.000
    1500.0 ->  1500.000
   -1500.0 -> -1500.000
     -0.25 ->    -0.250

Другой (похожей) возможностью является String.Format:

  Double value = 1500.0;
  // Put value at place {0} with format "F4" aligned to right up to 9 symbols
  String result = String.Format("{0:9,F4}", value);
person Dmitry Bychenko    schedule 03.12.2013
comment
' ' используется по умолчанию, так что это не обязательно. 0.00005.ToString("F3") произведет "0.000", но имейте в виду, что 0.0005.ToString("F3") произведет "0.001". - person Corak; 03.12.2013
comment
Мне нужна эта форма: chartArea.AxisY.LabelStyle.Format = "{???}";. Я не могу использовать ToString() и PadLeft() - person fedab; 03.12.2013
comment
@DmitryBychenko Мне это не подходит. Когда я использую {0:9,F4}, я получаю в результате 0F4, вплоть до 2F4 (мои значения достигают 1500). Я попробовал это: и {0:000000} будет выглядеть как 000013. - person fedab; 03.12.2013

Попробуйте > result = Math.Round(yourValue, 3);
См. полный справочник здесь !

person zey    schedule 03.12.2013

вы не можете добиться этого с помощью простой функции форматирования

   string result = string.Empty;

        var array = dec.ToString().Split('.');
        if (dec > 0)
        {

            result = array[0].PadLeft(9).Remove(0, 9);


            if (array.Count() > 1)
            {
                result += '.' + array[1].PadRight(3).Remove(3);
            }
        }
        else
        {

            result = "-"+array[0].PadLeft(9).Remove(0, 9);
            if (array.Count() > 1)
            {
                result += '.' + array[1].PadRight(3).Remove(3);
            }

        }
person BRAHIM Kamel    schedule 03.12.2013