Beispielcode
float myfloat;
float sensorCalbrate = 1.117;
int x;
int y;
float z;
x = 1;
y = x / 2; // y enthält jetzt 0, ints können keine Brüche enthalten
z = (float)x / 2.0; // z enthält jetzt .5 (Du musst 2.0 verwenden, nicht 2)
Anmerkungen und Warnungen
Wenn du mit floats rechnest, musst du ein Dezimalzeichen hinzufügen, andernfalls wird es als int
behandelt. Siehe die Fließpunkt-Konstanten-Seite für weitere Informationen.
Floats haben eine Genauigkeit von nur 6-7 Dezimalstellen. Das bedeutet die Gesamtzahl der Ziffern, nicht die Zahl rechts vom Dezimalpunkt.
Im Gegensatz zu anderen Plattformen, bei denen du durch die Verwendung eines double
(z. B. bis zu 15 Ziffern) eine höhere Genauigkeit erzielen kannst, hat double
auf dem Arduino die gleiche Größe wie float
.
Fließkommazahlen sind nicht genau und können beim Vergleich zu seltsamen Ergebnissen führen. Zum Beispiel kann 6.0 / 3.0
nicht gleich 2.0
sein.
Du solltest stattdessen überprüfen, ob der absolute Wert der Differenz zwischen den Zahlen geringer als eine kleine Zahl ist.
Die Konvertierung von Gleitkomma- in Ganzzahl-Mathematik führt zu Kürzungen:
float x = 2.9; // Eine float-Variable
int y = x; // 2
Wenn du stattdessen während des Konvertierungsprozesses abrunden möchtest, musst du 0,5
addieren:
float x = 2.9;
int y = x + 0.5; // 3
oder die round()
-Funktion nutzen:
float x = 2.9;
int y = round(x); // 3
Die Gleitkomma-Mathematik ist bei Berechnungen auch viel langsamer als die Ganzzahl-Mathematik.
Es sollte also vermieden werden, wenn beispielsweise eine Schleife für eine kritische Timing-Funktion mit Höchstgeschwindigkeit laufen muss.
Programmierer gehen oft etwas in die Länge und konvertieren Gleitkomma-Berechnungen in Ganzzahl-Mathematik, um die Geschwindigkeit zu erhöhen.