开发者

Printing Significant Digits

开发者 https://www.devze.com 2023-01-18 07:18 出处:网络
I\'m attempting to create graph axis labels -- the physical text.I know how to get the labels and print them using GDI, but my algorithm doesn\'t do a great job of printing with fractional s开发者_高级

I'm attempting to create graph axis labels -- the physical text. I know how to get the labels and print them using GDI, but my algorithm doesn't do a great job of printing with fractional s开发者_高级运维teps.

To print the labels, I currently get the first label and then add a step to each label that follows:

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

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

Is there a number.ToString("something") that will print out decimals if they are there, otherwise just the whole part? I would first check if either start, end, or step contains a fractional part, then if yes, print all labels with a decimal.


See the custom format strings here :http://msdn.microsoft.com/en-us/library/0c899ak8.aspx I think I understand your question... does

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

give you the behavior you are asking for? I often use "#,##0.####" for similar labels. Also, see this question: Formatting numbers with significant figures in C#


There is nothing wrong with using a custom format string, but the standard general numeric format string ("G") will work fine in this case too as I was recently reminded:

current.ToString("G");

Here is a quick, self-contained example that juxtaposes the custom and standard format-string approaches...

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"));

..., which yields:

3
3.5
3
3.5
0

精彩评论

暂无评论...
验证码 换一张
取 消