我想将浮点数(例如 f=1.234)转换为字符数组(例如 s="1.234")。使用 snprintf()
非常简单但由于某些尺寸和性能原因,我不能使用它(它是一个嵌入式平台,snprintf()
太慢,因为它在内部使用 double )。
那么:如何轻松地将浮点数转换为字符数组(正负浮点数,无指数表示,点后最多三位数字)?
谢谢!
PS:澄清这一点:该平台带有一个 NEON FPU,它可以在硬件中进行 32 位浮点运算,但对于 64 位 double 运算速度很慢。不幸的是,这个平台的 C 库没有 snprintf 的特定 NEON/float 变体,所以我需要一个替换。除此之外,完整的 snprintf/printf-stuff 会过多地增加代码大小
最佳答案
对于许多微 Controller ,可以使用没有浮点/ double 支持的简化 printf 函数。例如,许多平台都有 newlib nano 和 texas 仪器提供 ustdlib.c
.
使用其中一个非浮点 printf 函数,您可以将打印拆分为仅使用整数的东西,例如
float a = -1.2339f;
float b = a + ((a > 0) ? 0.0005f : -0.0005f);
int c = b;
int d = (int)(b * 1000) % 1000;
if (d < 0) d = -d;
printf("%d.%03d\n", c, d);
哪个输出
-1.234
请注意 8 位和 16 位平台上的整数溢出。
-编辑-
此外,正如评论所言,圆角案例将提供与
printf
不同的答案。的实现。
关于c - 寻找 snprintf()-替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50228328/