0

例如,Arduino 不能将 40 以后的数字乘以 1000

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

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

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

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

4

2 回答 2

2

问题是你是

  1. 取一个(有符号的)整数并将其设置为 60
  2. 取一个(有符号的)整数并将其设置为 1000
  3. 将它们相乘,得到一个有符号整数。这会产生溢出,所以结果是 -5536
  4. 将此数字转换为浮点数;-5536 -> -5536.0

解决方案?既然你想处理花车...用花车操作!

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

两种解决方案是一样的;第一个将 (int)60 转换为浮点数,然后将其乘以 (int)1000,得到 (float)60000。第二个告诉编译器 60.0 是一个浮点数。

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

于 2014-07-17T20:02:49.903 回答
0

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

Serial.print((float)a);

或这个:

#include "floatToString.h"
char buffer[25];
Serial.print(floatToString(buffer, a, 5));
于 2014-07-17T17:35:38.887 回答