打印有效数字

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

【讨论】:

以上是关于打印有效数字的主要内容,如果未能解决你的问题,请参考以下文章

python 打印需要有效数字。

打印一系列数字优化第 2 部分 [关闭]

控制R中打印输出中的小数位数

如何在 Delphi 中将浮点数转换为字符串,指定有效数字,而不是十进制数字(而不是 G 格式)

EXCEL数据有效性里面怎样实现批量打印?如何一键完成打印第一页跟第二页?

如何将二进制整数转换为十六进制字符串?