lua - nodemcu string.format 奇怪的结果
问题描述
我需要浮点数的特定格式: (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 年 4 月 9 日 15:12 创建,由 SDK 2.2.1(cfd48f3) 上的 Lua 5.1.4 提供支持
BR, eHc
解决方案
这是 NodeMCU 中的一个错误(或未记录的缺陷)。
string.format
Lua通过将格式说明符交给 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
目前没有为数字实现格式 - 正如您所注意到的,它只是在左侧填充,无论符号如何。
推荐阅读
- c++ - TrueType 字体缩放会导致文本模糊?
- javascript - 将鼠标悬停在按钮上可加快视频速度,当不悬停按钮时,视频会恢复到相同的速度
- wordpress - nginx 和 wordpress 不同的 docker-compose 文件
- python - 如何将正则表达式对象与python中的列表进行比较?
- php - PHP:复选框数组中的选中属性
- google-chrome-extension - 如何为浏览器扩展提供所有文本数据输入到该浏览器?
- javascript - React 类组件方法:我的代码是必须的吗?
- javascript - 在(Vue,React)中导出带有子模块的模块的最佳方法是什么
- python - 计算不同颜色的像素 - Python
- python - 使用 intellj 在 python 窗口 10 中导入 mxnet