在C中打印double(printf)的最简单的解决方案是什么:
对于所有双数(n和无穷大分别处理),正数和负数(+或 - 始终作为第一个字符),使用正好N个字符(将大约为6);
使用十进制表示('。'始终存在),只要数字字符不是全0(即数字太小)或小数点是N字符的最后一个(即太大的数字) 。否则切换到科学表示,总是占据正好N个字符。
我能想到的所有解决方案似乎都非常复杂,任何想法都很容易获得这个结果(效率在这里不是一个问题)?
谢谢!
答案 0 :(得分:0)
我无法通过单个printf调用找到方法,这是我的解决方案。
必须使用至少9个字符(前面带+ - ),这是科学记数法的最小字符数(例如:+ 1.0E-002)。在下面我考虑9个字符的情况。根据以下报告的条件使用以下两种格式:
科学格式'%+。1e':
按照十进制格式的字符4到9为0且数字不等于0(即小数字太小)
'。' char 3在char 3和char 8之间不存在十进制格式(即十进制格式太大)
十进制格式'%+。6f':
无限或纳
所有其他案件
通过更改上面的常量,很容易适应超过9个字符的表示。