gpt4 book ai didi

lua - nodemcu string.format 奇数结果

转载 作者:行者123 更新时间:2023-12-04 21:56:03 25 4
gpt4 key购买 nike

我需要一个浮点数的特定格式:(sign)xx.dd
尝试为此格式设置 string.format 时,我得到了奇怪的结果。

h= 5.127 --(it should beconverted to +05.13)

print(string.format("%+05.2f",h))
--> 05.13

print(string.format("%+06.2f",h))
--> 005.13

h= -5.127 --(it should beconverted to -05.13)

print(string.format("%05.2f",h))
--> -5.13

print(string.format("%06.2f",h))
--> 0-5.13

当然,我有一个简单的解决方法,但我认为这个版本有问题。

构建创建于 2018-04-09 15:12
由 SDK 2.2.1(cfd48f3) 上的 Lua 5.1.4 提供支持

BR,
肝硬化

最佳答案

这是 NodeMCU 中的一个错误(或未记录的缺陷)。

Lua 实现了 string.format 的大部分处理将格式说明符交给 C 标准库的 sprintf功能。 (有几件事 sprintf 允许 Lua 不允许,但 + 应该可以正常工作。)

NodeMCU 修改了 Lua 以使用对 NodeMCU 定义的替换函数的调用替换大部分(或全部)标准库调用(这通常很疯狂,但在嵌入式系统领域可能没问题)。 NodeMCU的sprintf实现不支持 + .

这是来自 NodeMCU 源 ( c_stdio.c ) 的相关代码。请注意,格式说明符中的未知字符将被静默忽略:

for (; *s; s++) {
if (strchr("bcdefgilopPrRsuxX%", *s))
break;
else if (*s == '-')
fmt = FMT_LJUST;
else if (*s == '0')
fmt = FMT_RJUST0;
else if (*s == '~')
fmt = FMT_CENTER;
else if (*s == '*') {
// [snip]
// ...
} else if (*s >= '1' && *s <= '9') {
// [snip]
// ...
} else if (*s == '.')
haddot = 1;
}

同样, 0目前没有为数字实现格式化——正如你所注意到的,它只是在左边填充而不考虑符号。

关于lua - nodemcu string.format 奇数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50047072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com