我正在阅读一本C语言书,它说%f, %e, %g, %a
是用于float
和double
数据类型的printf字符。目前,我完全可以理解%f, %e, %g
。
我何时需要使用%a
打印float
和double
类型数据?
你能告诉我一个例子。
答案 0 :(得分:35)
%a
格式说明符是C99中的新增内容。它以十六进制形式打印浮点数。这不是您用来向用户提供数字的东西,但它对于引擎盖/技术用例非常方便。
例如,这段代码:
printf("pi=%a\n", 3.14);
打印:
pi=0x1.91eb86p+1
评论中链接的优秀文章解释说,这应该是“1.91EB86 16 * 2 1 ”(即{{1} } {是p
浮点数被提升为)。在这种情况下,“1.91EB86 16 ”是“1.5700000524520874 10 ”。乘以“2 1 ”,得到“3.140000104904175 10 ”。
请注意,这也具有保留所有精度的有用属性,并以健壮的方式呈现它们。
答案 1 :(得分:6)
至于您希望使用十六进制表示的原因示例,您可能希望使用%a来精确表示发送到另一台计算机进行处理的浮点值。
我们目前正在使用它来对嵌入式控制器进行单元测试,方法是通过UART将模拟传感器和执行器的模拟工厂模型发送到嵌入式处理器,其中嵌入式处理器执行控制处理并返回反馈(同样, float表示为%a)返回工厂模型以关闭循环。