С# двойное форматирование выравнивается по десятичному знаку

Я выравниваю числа с различным количеством десятичных знаков, чтобы десятичный знак выравнивался по прямой строке. Этого можно добиться, заполнив пробелами, но у меня проблемы.

Лейс говорит, что я хочу выровнять следующие числа: 0 0,0002 0,531 2,42 12,5 123,0 123172

Это результат, который мне нужен:

     0
     0.0002
     0.531
     2.42
    12.5
   123.0
123172

person Paaland    schedule 25.02.2010    source источник


Ответы (2)


Если вам нужен именно такой результат, вы не можете использовать какое-либо форматирование числовых данных, так как это не будет форматировать 123 как 123.0. Вы должны обрабатывать значения как строки, чтобы сохранить конечный ноль.

Это дает вам именно тот результат, который вы просили:

string[] numbers = { "0", "0.0002", "0.531", "2.42", "12.5", "123.0", "123172" };

foreach (string number in numbers) 
{
    int pos = number.IndexOf('.');
    if (pos == -1) 
        pos = number.Length;
    Console.WriteLine(new String(' ', 6 - pos) + number);
}

Выход:

     0
     0.0002
     0.531
     2.42
    12.5
   123.0
123172
person Guffa    schedule 25.02.2010
comment
Это можно улучшить, соблюдая десятичный разделитель, зависящий от языка и региональных параметров. - person ClickRick; 19.07.2014
comment
@ClickRick: Да, но тогда вам нужно указать, какая культура использовалась для создания строк. Строки нигде в этом коде не рассматриваются как числа. - person Guffa; 19.07.2014

Для этого вы можете использовать метод double string.format или ToString.

double MyPos = 19.95, MyNeg = -19.95, MyZero = 0.0;

string MyString = MyPos.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: $19.95.

MyString = MyNeg.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: ($19.95).
// The minus sign is omitted by default.

MyString = MyZero.ToString("$#,##0.00;($#,##0.00);Zero");

// In the U.S. English culture, MyString has the value: Zero.

эта статья от msdn может помочь вам, если вам нужно больше деталей

person Prashant Lakhlani    schedule 25.02.2010