[英]arm-none-eabi-gcc : Printing float number using printf
我正在为 SAM3N arm cortex-M3 微控制器编写一个 C 程序。 当我尝试打印浮点数时,它只打印“f”。 示例: printf("%f",43.12);
仅打印f
,不打印43.12
。
但是用整数打印效果很好。
如何启用花车的完整打印? 我知道编译器默认情况下会禁用浮点打印以减小代码大小(即,它们似乎链接了精简版)。 另外请注意,makefile 中没有使用CFLAGS=-Dprintf=iprintf
iprintf。
工具详情:
您可以尝试在链接器设置中添加以下选项
-lc -lrdimon -u _printf_float
它在ARM-CORTEXM0中对我有用
可能是因为您的平台/库不支持printf/sprintf
%f
格式说明符。 作为第一种方法,您可以为浮动/双打滚动自己的printf:
void printDouble(double v, int decimalDigits)
{
int i = 1;
int intPart, fractPart;
for (;decimalDigits!=0; i*=10, decimalDigits--);
intPart = (int)v;
fractPart = (int)((v-(double)(int)v)*i);
if(fractPart < 0) fractPart *= -1;
printf("%i.%i", intPart, fractPart);
}
@Agnius Vasiliauskas 的答案是部分正确的,它不考虑 v 为负且大于 -1 (-1<v<0) 的情况,实际上在这种情况下 intPart 应该前面有一个负号。
例如:如果 v=-0.55 intPart 将为 0,那么您将打印 0.55 而不是 -0.55,您必须手动添加正确的符号。 如下所示。
void printDouble(double v, int decimalDigits)
{
int i = 1;
int intPart, fractPart;
for (;decimalDigits!=0; i*=10, decimalDigits--);
intPart = (int)v;
fractPart = (int)((v-(double)(int)v)*i);
if(fractPart < 0) fractPart *= -1;
if(v<0 && intPart=0) printf("-%i.%i", intPart, fractPart);
else printf("%i.%i", intPart, fractPart);
}
在默认情况下禁用浮点数的编译器中,默认库可以处理它们是不常见的。 查看引用,您将找到有关如何使用浮点支持重新编译相应库的信息,或者(更有可能)在何处查找已使用它构建的版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.