Printing Significant Digits
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
精彩评论