我的环境没有printf()
或任何等价物,所以我自己写的。但我不知道如何执行float
类型的转换。我试着看看gcc是如何做到的,但这真的很难理解。
答案 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
转换为字符串的函数的其他一些实现。