我需要以不会丢失任何信息的方式将单精度数字表示为文本(因此我可以返回相同的数字,可能忽略NaN等),但没有太多的虚假数字 - 所以单精度为0.1出现为“0.1”而不是“0.100000001490116”。
我不是想节省字节,这些额外的数字只是令人困惑。
有一种简单的方法吗?我可以看到至少需要8个有效十进制数来表示23 + 1位(12345678.0和12345679.0在单精度上有所不同),并且用二进制指数(12345b-11
表示法就足够了)但是这保证是足够的十进制指数表示法(1.2345e+6
)或使用0填充(0.0000123456
- 通常更具可读性,并且这些零点不会让我感到烦恼)?
任何printf
格式或完全赞赏的确切说明。
答案 0 :(得分:3)
正确行事是一项非常重要的任务:问题是多篇学术论文的主题。
许多开源项目都使用David M. Gay的dtoa.c库。如果你使用Python,最近发布了基于dtoa.c的舍入(2.7 / 3),关于相关任务讨论的讨论非常值得:
如果你想了解更多(很多):