c - 寻找 snprintf()-替换

标签 c floating-point embedded printf

我想将浮点数(例如 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/

相关文章:

c++ - 使用 GNU 科学库 (GSL) 使用不均匀分布的点绘制 2D B 样条路径

c - 将结构体作为其单独的属性传递给函数

php - 理解 php 中的 float

encoding - 相同大小的整数和浮点值在其各自的最小值和最大值之间是否具有相同的粒度?

ios - iPhone NSXMLParser 解析字符串并存储在 NSNumber 变量和不同的数据类型中

车载监控系统嵌入式项目

c - 将 PIN 状态作为函数参数传递

c++ - MS 蓝牙堆栈文档

c - 转置二维数组

c - 我的第二个函数 stub 似乎无限循环?