Arduino乘法错误

时间:2014-07-17 13:40:51

标签: arduino arduino-uno

Arduino无法将数字从40开始乘以1000,例如

void setup() {
  Serial.begin(9600);
}

void loop() {
    float a = 60 * 1000;
    Serial.print(a);
}

结果是-5536 .-。 ???什么??

我需要将秒转换为毫秒,但我不知道乘法的替代方法

2 个答案:

答案 0 :(得分:2)

问题是你是

  1. 获取(签名)int并将其设置为60
  2. 获取(签名)int并将其设置为1000
  3. 将它们相乘,获得一个带符号的int。这会产生溢出,因此结果为-5536
  4. 在浮点数中转换此数字; -5536 - > -5536.0
  5. 解决方案?既然你想处理花车......用花车操作!

    float a = ((float)60) * 1000;
    float a = 60.0 * 1000;
    

    两种解决方案是相同的;第一个在浮点数中转换(int)60,然后将它乘以(int)1000,这给你(浮点数)60000。 第二个告诉编译器60.0是浮点数。

    在这两种情况下,浮点数乘以一个int会给你一个浮点数,所以......没有溢出!

答案 1 :(得分:0)

问题是Serial.print会将a转换为有符号整数。试试这个:

Serial.print((float)a);

或者这个:

#include "floatToString.h"
char buffer[25];
Serial.print(floatToString(buffer, a, 5));