Печать значимых цифр - PullRequest
       10

Печать значимых цифр

4 голосов
/ 03 октября 2010

Я пытаюсь создать метки оси графика - физический текст.Я знаю, как получить этикетки и напечатать их с помощью GDI, но мой алгоритм не справляется с печатью с дробными шагами.

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

public static void PrintLabels(double start, double end, double step);
{
    double current = start;

    while (current <= end)
    {
        gfx.DrawString(current.ToString(),...); 
        current += step;
    }
}

Есть ли number.ToString("something"), который будет печатать десятичные дроби, если они есть, в противном случае - только всю часть?Сначала я проверил бы, содержит ли начало, конец или шаг дробную часть, а затем, если да, напечатайте все метки с десятичной дробью.

Ответы [ 2 ]

7 голосов
/ 03 октября 2010

См. Строки пользовательского формата здесь: http://msdn.microsoft.com/en-us/library/0c899ak8.aspx Я думаю, что я понимаю ваш вопрос ...

   current.ToString("#0.#");

дать вам поведение, которое вы просите? Я часто использую "#,##0.####" для похожих ярлыков. Также см. Этот вопрос: Форматирование чисел со значимыми цифрами в C #

0 голосов
/ 13 октября 2014

Нет ничего плохого в использовании строки нестандартного формата, но стандартная строка числового формата ("G") будет работать и в этом случае, как мне недавно напомнили:

current.ToString("G");

Вот быстрый, автономный пример, который противопоставляет нестандартные и стандартные подходы форматирования строк ...

double foo = 3.0;
double bar = 3.5;

// first with custom format strings
Console.WriteLine(foo.ToString("#0.#"));
Console.WriteLine(bar.ToString("#0.#"));

// now with standard format strings
Console.WriteLine(foo.ToString("G"));
Console.WriteLine(bar.ToString("G"));

..., что дает:

3
3.5
3
3.5
...