将int转换为float会导致错误的值(尽管不是通常的十进制舍入错误)

巴朱瓦

由于某种原因,当将整数转换为浮点数时(在Arduino上使用c(-ish)),我得到了一些非常意外的结果。
过去,我在arduino上遇到内存问题,因此这可能是有用的故障排除提示或红色鲱鱼...。

无论如何,这是我的代码(仅相关部分),给出的值为“ 6/8”,这将导致meterValue = 0.75:

我的功能:

int getIntegerFromFileStream(File f, char* previewedChar) {
    int num = 0;
    while (48 <= *previewedChar && *previewedChar <= 57) {
        // Ascii range 48-57 represents digits 0-9
        num = (num*10) + atoi(previewedChar);
        *previewedChar = f.read();
    }
    Serial.print(F("Found integer: "));
    Serial.println(num);
}

主要代码:

[.... rest of my code ....]    
// Get the value for the meter from the fractional form (ex: 4/4 or 6/8)    
meterValue = (float)getIntegerFromFileStream(file, &inputChar);    
Serial.print(F("New meter value: "));    
Serial.println(meterValue);    
if (inputChar == '/') {    
    inputChar = file.read(); // move past the '/'    
    meterValue /= (float)getIntegerFromFileStream(file, &inputChar);    
    Serial.print(F("New meter value: "));    
    Serial.println(meterValue);    
}    
[.... rest of my code ....]

这是上面代码的输出:

找到的整数:6
新的仪表值:3.00
找到的整数:8
新的仪表值:1.00
新的仪表值:1.00

从输出中可以看到,整数本身已经被正确解析,但是一旦离开函数并将其强制转换为浮点数,其值就会更改(而不是通常的float-decimal-error方式)。
任何提示将不胜感激!

编辑:

发现我的newb错误:我的getInt函数没有返回值,因此导致未定义的行为。
事实证明,默认情况下,Arduino不会在编译期间发出警告,除非您专门进入Preferences并打开“ verbose”输出进行编译。设置好之后,我便可以看到这些警告。(目前仅对此进行编辑,因为我对于stackoverflow而言还太陌生,无法回答自己的问题,一旦时间到了,我就会这样做)

巴朱瓦

发现我的newb错误:我的getInt函数没有返回值,因此导致未定义的行为。
事实证明,默认情况下,Arduino不会在编译期间发出警告,除非您专门进入Preferences并打开“ verbose”输出进行编译。设置好之后,我便可以看到这些警告。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将int转换为float会导致错误的值(尽管不是通常的十进制舍入错误)

来自分类Dev

将Firebase值(Int)转换为String会导致错误

来自分类Dev

在负十六进制和负十进制之间转换会导致错误的结果

来自分类Dev

SQL Server 2008,将十进制值转换为百分比而不舍入?

来自分类Dev

期望值浮点,十进制舍入错误

来自分类Dev

从 float 转换为 int 时的舍入错误

来自分类Dev

将十进制转换为十六进制值

来自分类Dev

将十六进制字符串转换为 ASCII 值的函数会导致段错误

来自分类Dev

将二进制字符串转换为十进制时结果错误

来自分类Dev

将十进制转换为二进制的C ++程序出现分段错误

来自分类Dev

将十进制转换为二进制错误(C)

来自分类Dev

将 Java 十六进制转换为十进制时出现错误

来自分类Dev

将十进制数从str转换为float

来自分类Dev

再次将字节的十进制值转换为字节的十进制值

来自分类Dev

再次将字节的十进制值转换为字节的十进制值

来自分类Dev

从char转换为int并打印十进制值

来自分类Dev

如何将numpy.int32转换为十进制。十进制

来自分类Dev

无法从双精度转换为十进制错误

来自分类Dev

将临时列(十进制)转换为十进制,但仍然出现“将 varchar 转换为数字类型的算术溢出错误”

来自分类Dev

将十进制BGR颜色转换为单个RGB十进制值

来自分类Dev

WCF将十进制值转换为零

来自分类Dev

Swift-将数据转换为十进制值

来自分类Dev

将FFFFFF转换为十进制值(C语言)

来自分类Dev

将 ASCII 转换为其十进制值

来自分类Dev

将IEEE-754双精度和单精度转换为十进制Java错误

来自分类Dev

一些错误-尝试将罗马条目转换为十进制

来自分类Dev

TypeError(“无法将%r转换为十进制”%值)TypeError:无法将<LenderInvestment:20000.00>转换为十进制

来自分类Dev

将时间转换为十进制

来自分类Dev

将整数转换为十进制

Related 相关文章

  1. 1

    将int转换为float会导致错误的值(尽管不是通常的十进制舍入错误)

  2. 2

    将Firebase值(Int)转换为String会导致错误

  3. 3

    在负十六进制和负十进制之间转换会导致错误的结果

  4. 4

    SQL Server 2008,将十进制值转换为百分比而不舍入?

  5. 5

    期望值浮点,十进制舍入错误

  6. 6

    从 float 转换为 int 时的舍入错误

  7. 7

    将十进制转换为十六进制值

  8. 8

    将十六进制字符串转换为 ASCII 值的函数会导致段错误

  9. 9

    将二进制字符串转换为十进制时结果错误

  10. 10

    将十进制转换为二进制的C ++程序出现分段错误

  11. 11

    将十进制转换为二进制错误(C)

  12. 12

    将 Java 十六进制转换为十进制时出现错误

  13. 13

    将十进制数从str转换为float

  14. 14

    再次将字节的十进制值转换为字节的十进制值

  15. 15

    再次将字节的十进制值转换为字节的十进制值

  16. 16

    从char转换为int并打印十进制值

  17. 17

    如何将numpy.int32转换为十进制。十进制

  18. 18

    无法从双精度转换为十进制错误

  19. 19

    将临时列(十进制)转换为十进制,但仍然出现“将 varchar 转换为数字类型的算术溢出错误”

  20. 20

    将十进制BGR颜色转换为单个RGB十进制值

  21. 21

    WCF将十进制值转换为零

  22. 22

    Swift-将数据转换为十进制值

  23. 23

    将FFFFFF转换为十进制值(C语言)

  24. 24

    将 ASCII 转换为其十进制值

  25. 25

    将IEEE-754双精度和单精度转换为十进制Java错误

  26. 26

    一些错误-尝试将罗马条目转换为十进制

  27. 27

    TypeError(“无法将%r转换为十进制”%值)TypeError:无法将<LenderInvestment:20000.00>转换为十进制

  28. 28

    将时间转换为十进制

  29. 29

    将整数转换为十进制

热门标签

归档