相当于在固定数量的字符中打印双倍数字

时间:2014-03-13 16:53:32

标签: c printf

在C中打印double(printf)的最简单的解决方案是什么:

  1. 对于所有双数(n和无穷大分别处理),正数和负数(+或 - 始终作为第一个字符),使用正好N个字符(将大约为6);

  2. 使用十进制表示('。'始终存在),只要数字字符不是全0(即数字太小)或小数点是N字符的最后一个(即太大的数字) 。否则切换到科学表示,总是占据正好N个字符。

  3. 我能想到的所有解决方案似乎都非常复杂,任何想法都很容易获得这个结果(效率在这里不是一个问题)?

    谢谢!

1 个答案:

答案 0 :(得分:0)

我无法通过单个printf调用找到方法,这是我的解决方案。

必须使用至少9个字符(前面带+ - ),这是科学记数法的最小字符数(例如:+ 1.0E-002)。在下面我考虑9个字符的情况。根据以下报告的条件使用以下两种格式:

科学格式'%+。1e':

  • 按照十进制格式的字符4到9为0且数字不等于0(即小数字太小)

  • '。' char 3在char 3和char 8之间不存在十进制格式(即十进制格式太大)

十进制格式'%+。6f':

  • 无限或纳

  • 所有其他案件

通过更改上面的常量,很容易适应超过9个字符的表示。