2017-01-11 4 views
-4

Der Code, den ich in C++ verwendet wird:float-Variable speichert nicht dezimal

float y; 
y=360/100; 
cout<<y; 

die Ausgabe 3. Selbst, wenn ich nicht ausgegeben y tun, und es stattdessen für eine Funktion wie links (y), wird der Wert 3 anstelle von 3,6 verwendet. Aber wenn ich y = 360.0/100 definiere, funktioniert es gut.

Übrigens ist left() eine Funktion, die im Paket von unserem CS prof. Enthalten ist. Links (x) ändert die Richtung um einen Winkel von x Grad nach links. Ein logobasiertes Paket.

+0

Verwenden Sie 'y = 360f/100;' – Axel

+0

Dies ist eine * Ganzzahl * Division in einer Float-Variable gespeichert. Das Ergebnis ist 3, egal wo es gespeichert ist. –

+0

In C und Geschwistern (und Cousins ​​und anderen fernen Verwandten, sogar adoptierten Kindern), ergibt Integer-Division ein ganzzahliges Ergebnis. –

Antwort

2

So ist die Sprache definiert. Sie teilen eine int durch eine int, so dass die Berechnung durchgeführt wird, was zu einer int führt, die 3 (trunking, anstatt Rundung) geben.

Sie speichern dann 3 in eine float, geben 3.0.

Wenn Sie die Division unter Verwendung von float s durchführen möchten, machen Sie (mindestens) eines der Argumente a float, z. 360f/100. Auf diese Weise wird das andere Argument in floatkonvertiert, bevor die Division durchgeführt wird.

360/100f wird genauso gut funktionieren, aber ich denke, es macht wahrscheinlich Sinn, so früh wie möglich klar zu machen, dass dies eine Fließkommaberechnung ist, anstatt eine ganzzahlige; Das ist eher eine menschliche als eine technische Überlegung.

(Beachten Sie, dass 360.0 ist eigentlich ein double, obwohl diese verwendet, wird ebenfalls funktionieren. Die Teilung würde als double durchgeführt werden, die dann zu einem float für die Zuordnung konvertiert Ergebnis).

0

360/100 wird in ganzzahlige Arithmetikberechnet, bevor sie diefloat zugewiesen sind.

Nachbearbeiten zu 360f/100 ist meine Lieblingsmethode, das zu beheben.

Schließlich sind diese Tage float s für Quiche Esser, Mädchen und Leute, die nicht verstehen, wie moderne Chipsets arbeiten. Verwenden Sie stattdessen einen double Typ - der wahrscheinlich schneller ist - und 360.0/100.