如何在没有printf()的情况下在stdout上打印浮点数?

时间:2013-10-12 18:02:20

标签: c printf floating

我的环境没有printf()或任何等价物,所以我自己写的。但我不知道如何执行float类型的转换。我试着看看gcc是如何做到的,但这真的很难理解。

2 个答案:

答案 0 :(得分:4)

浮点格式很容易出错。编写一个适用于“大多数”数字的简单实现看起来很简单,但很可能会打破非常大的数字,非常小的数字和接近零的数字,更不用说IEEE754次正规,无穷大和NaN。尾随小数也可能出错,无法提供允许逐位再现浮点数的字符串表示。

幸运的是,有些库可以实现格式化浮点数的工作,无论是用于教育,还是用于嵌入式系统,还是用于改进标准库格式的某些方面。如果可能的话,我建议您合并David Gay's dtoa library,这已经在Python和其他地方进行了广泛测试。

答案 1 :(得分:2)

您可以查看musl libc实现。 musl是一个轻量级的libc。

fmt_fp中定义的src/stdio/vfprintf.c函数中,它们基本上将float转换为fprintf转换说明符的字符串,如f

如果您使用关键字ftoa在互联网上搜索,您会发现将float转换为字符串的函数的其他一些实现。