C # двойное форматирование выравнивание по десятичному знаку - PullRequest
6 голосов
/ 25 февраля 2010

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

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

Вот результат, к которому я стремлюсь:

     0
     0.0002
     0.531
     2.42
    12.5
   123.0
123172

Ответы [ 2 ]

6 голосов
/ 25 февраля 2010

Если вы хотите именно такой результат, вы не можете использовать какое-либо форматирование числовых данных, поскольку это не отформатирует 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
0 голосов
/ 25 февраля 2010

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

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 может помочь вам, если вам нужно больше деталей

...