【问题标题】:How to print a float on stdout without printf()?如何在没有 printf() 的情况下在标准输出上打印浮点数?
【发布时间】:2013-10-12 18:02:19
【问题描述】:

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

【问题讨论】:

  • “要求代码的问题必须证明对正在解决的问题有最低限度的了解。包括尝试的解决方案、它们为什么不起作用以及预期的结果。”你都尝试了些什么?什么不起作用?您提到“float 类型的转换”,但是您需要转换什么?你不是只是想写一个接受浮点数并写入一些输出的方法吗?
  • @JoshuaTaylor:我没有发布我的代码,因为它完全错误......但我做到了。等一下。
  • ...从float到ASCII的转换
  • 谢谢!另外,正如已经提到的答案,您可以使用 other 库代码,例如,采用浮点数并生成字符串的东西吗?你提到你不能使用printf,但是你有什么和没有什么实际限制是什么?另外,正如我在对一个答案的评论中提到的那样,您有什么可用?您使用什么 API 来创建输出? putc,也许?我们可以假设您拥有标准 C 库的哪一部分?
  • 回复:“转换是从浮点数到 ASCII”所以实际的问题是如何获取包含 float 的表示的 字符串?我问只是因为可能有一些方法(例如操作系统例程)会为您输出一个浮点数,但不会给你char*

标签: c printf floating


【解决方案1】:

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

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

【讨论】:

  • 真的很容易出错...这就是为什么我在寻求帮助并且没有在线程中提供任何代码...我写了一个小程序,通过灵感似乎可以正常工作来自其他用于嵌入系统的 printf(),但我测试的各种float 数字显示完全错误。感谢您的链接。我去看看
【解决方案2】:

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

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 2018-06-12
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
相关资源
最近更新 更多