打印有效数字
Posted
技术标签:
【中文标题】打印有效数字【英文标题】:Printing Significant Digits 【发布时间】:2010-10-03 00:36:44 【问题描述】:我正在尝试创建图形轴标签——物理文本。我知道如何获取标签并使用 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")
可以打印出小数(如果存在),否则只打印整个部分?我会首先检查 start、end 或 step 是否包含小数部分,如果是,则打印所有带小数的标签。
【问题讨论】:
【参考方案1】:在此处查看自定义格式字符串:http://msdn.microsoft.com/en-us/library/0c899ak8.aspx 我想我明白你的问题......确实
current.ToString("#0.#");
给你你要求的行为?我经常将"#,##0.####"
用于类似的标签。
另外,请参阅此问题:Formatting numbers with significant figures in C#
【讨论】:
很奇怪 .ToString("0.##") 不是在 C# 中将十进制转换为字符串的默认格式,但这确实为您提供了您最可能想要的 - 最多 2小数位,仅当它们不为零时。【参考方案2】:使用自定义格式字符串没有任何问题,但 standard general numeric format string ("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
【讨论】:
以上是关于打印有效数字的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Delphi 中将浮点数转换为字符串,指定有效数字,而不是十进制数字(而不是 G 格式)