lua5.4.1 中 lua_pushnumber 浮点数处理问题
在arm架构项目中将lua5.4.1移植系统上,在实现数据处理时发现一个奇怪现象。
-
在处理浮点数适合,发现lua_pushnumber将数据压栈后,再到脚本上读取出来时发现值变成科学数;无论输入什么值。
-
网络找了一圈发现没有找到答案, 于是想将浮点转字符串在压栈; 但发现转换的值后一直显示是0.0
-
同时在定义函数中使用c++的std::to_string(2.2) 将这个值打印发现也是0.0此时问题就变得神奇了, 明明是标准C++11的函数也会将
浮点输出强制转换了为0.0。
经过上面的试验,怀疑问题在编译时是否某个配置导致。
- 当前lua编译的就已经是32bit ; 开始怀疑是64bit导致,经过一番查找发现问题不在此。
- 还有什么可能行会导致这个问题出现。 没有答案;又只能先记录。
最后分析原因,C/C++标准库不支持浮点输出
- 不用惊讶,嵌入式系统上,单片机上标准库都能不使用的情况下,完全有这个可能性。 最后还是有别人确认是不支持float 类型。
- 处理方式1:
将float浮点数转十六进制字符串,当然这就不能很直观,但当初主要的目的也就是调试适合能看到浮点值*变化*,用16进制也同样能看到变化。
string FloatToHex(float const f)
{
char res[4];
sprintf(res,"%x",*(unsigned int*)&f);
printf("%s\n",res);
return string(res);
}
- 处理方式2:
老老实实的将float 转string 而且不带标准库的情况下。
参考网上一种极端简单方式: 采用宏的方式
#define TO_STRING(X) ""#X""
int FloatToStr_Define(void)
{
const char* s = TO_STRING(3.1415926);
printf("%s\n", s);
exit(0);
}
当然还有其他的方式。
本文来自博客园,作者:ljymoonlight,转载请注明原文链接:https://www.cnblogs.com/ljymoonlight/p/14947796.html
posted on 2021-06-28 22:34 ljymoonlight 阅读(1067) 评论(0) 编辑 收藏 举报