Hallo, kann mir jemand sagen warum das folgende Beispiel mit meinem Mega16 nicht funktioniert? Und zwar als Ergebnis wird eine Null ausgegeben. float myf=0.005; uint8_t buf[20]; myf = 10/50; dtostre (Periode, buf, 5, 0); uart_puts(buf); uart_puts("\n");
Hallo Anton, Peter, in diesem Fall ist der Schuldige schon gefunden (meiner Meinung nach) myf = 10/50; ergibt 0 (Null), da hier eine Ganzzahldivision durchgeführt wird. Da ist dann natürlich 10 durch 50 gleich Null. Wenn man eine Float-Division durchführen möchte, dann am besten mit : my = 10.0/50.0; (myf = 10/50.0; reicht auch). Allgemein : Wenn bei einer Division der Nenner ganzzahlig ist, dann wird automatisch eine Ganzzahldivision durchgeführt. Wenn man sicher gehen will, dass auch eine Gleitkommadivsion durchgeführt wird, dann muss man im Nenner einen Gleitkommawert verwenden (bzw. durch einen Cast das gleiche Verhalten erzeugen). Peter möge mich korrigieren, wenn ich falsch liege ;-). MfG, Daniel.
danke erstmal, das heisst, wenn ich zwei integer-Variablen durcheinander dividieren will, muss ich die im Nenner stehende Varaible erstmal in float konvertieren?
Hallo Anton, wenn Du wirklich dann ein Ergebnis mit Kommastellen haben möchtest, lautet die Antwort ja. Beispiel : int iA=6, iB=4; float fErg = iA / ((float)iB); fErg hat nun den Wert 1.5 Wenn Dich aber nur der ganzzahlige Teil der Rechnung interessiert, dann brauchst Du keine Typumwandlung (Cast). Beispiel : int iA=6, iB=4; int iErg = iA / iB; float fErg = iA / iB; in iErg steht nun 1, in fErg 1.0 Meistens verwendet man keine float-Variable um ganmzzahlige Werte zu speichern - das wäre Verschwendung von Rechenzeit und Speicherplatz. Außerdem kann das zu Mißverständnissen beim Lesen des Codes führen. Immer nach dem Motto arbeiten : "Das Programm schreibt man für den Menschen - der Code für den Prozessor macht dann der Compiler !" MfG, Daniel.
danke Daniel für die ausführliche Beschreibung, ich werde es heute ausprobieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.