ljymoonlight

导航

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); 
}

当然还有其他的方式。

posted on 2021-06-28 22:34  ljymoonlight  阅读(1067)  评论(0编辑  收藏  举报