2014-07-17 87 views
0

Arduino的不能夠從40起通過1000例如Arduino的乘法誤差

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

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

乘數的結果爲-5536 .-。 ???什麼 ??

我需要秒轉換成毫秒,但我不知道替代1000

+0

請參閱:https://learn.sparkfun.com/tutorials/data-types-in-arduino –

+0

如果它解決了您的問題,請將答案標記爲「已接受」 – frarugi87

回答

2

的問題是,你是

  1. 服用(簽字)int和其設置爲60
  2. 服用(簽署)int並將其設置爲1000
  3. 將它們相乘,獲得一個帶符號的int。這會產生溢出,所以結果是-5536
  4. 將此數字轉換爲浮點數; -5536 - > -5536.0

解決方案?既然你想處理漂浮物......用漂浮物操作!

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

這兩種解決方案是相同的;第一個將float(int)60轉換爲float,然後將其乘以(int)1000,這會給你(float)60000。 第二個告訴編譯器,60.0是一個浮點數。

在這兩種情況下,一個浮點乘以一個int給你一個浮點數,所以......沒有溢出!

+1

是的,很容易忘記整數常量默認情況下是16位的:http://arduino.cc/en/Reference/IntegerConstants – jdr5ca

0

的問題是,Serial.print轉換a到有符號整數乘法。試試這個:

Serial.print((float)a); 

或本:

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