Der Grund, warum float temp = b/a;
0 ergibt, während float temp = (float)b/a;
0.5 ergibt, ist der, dass der Compiler den Ausgabetyp der Divisionsoperation auf der Grundlage der Typen der Operanden bestimmt, nicht des Zielspeichertyps. Einfach gesagt:
Wenn du float temp = b/a;
machst, machst du das in der Ganzzahldivision von b
und a
und speichert dann die resultierende Ganzzahl (0 in deinem Beispiel) in eine Variable vom Typ float
. Wenn Sie den Wert in Fließkommawerte umwandeln, haben Sie die gesuchten Informationen bereits verloren (vorausgesetzt, Sie wollten eine Gleitkommadivision durchführen), und die Konvertierung bringt sie nicht zurück.
Um das gewünschte Ergebnis zu erhalten (vorausgesetzt, Sie möchten eine Gleitkommavariation durchführen), müssen Sie mindestens einen der Operanden in float
vor Sie umsetzen teilen.
In Ihrem Fall ist 50/100 0,2. Durch Erhalten des Ergebnisses für zwei ganze Zahlen wird das Ergebnis auch in ganzzahliger Form sein, so dass es den Dezimalteil abschneidet, der Ihnen 0 alleine gibt. Aber im Falle des Floatens wird es als eine schwimmende Division betrachtet, so dass Sie 0,2 erhalten
Tags und Links c objective-c