3 Stimmen

Umwandlung von Integer in Floating in C

float f1 = 123.125;
int i1 = -150;

f1 = i1;    // integer to floating conversion
printf("%i assigned to an float produces %f\n", i1, f1);

Ausgabe:

-150 assigned to an float produces -150.000000

Meine Frage ist, warum das Ergebnis 6 Nullen enthält ( 000000 ) nach dem . und nicht 7 oder 8 oder eine andere Zahl?

7voto

ephemient Punkte 189038

Das ist genau das, was printf tut. Siehe die Manpage wo es heißt

f , F

Das Double-Argument wird in Dezimalschreibweise in der Form "[-]ddd.ddd" umgewandelt, wobei die Anzahl der Stellen nach dem Radix-Zeichen der Präzisionsangabe entspricht. Fehlt die Genauigkeit, so wird sie mit 6 angenommen. Wenn die Genauigkeit ausdrücklich Null ist und kein '#'-Flag vorhanden ist, darf kein Radix-Zeichen erscheinen. Wenn ein Radix-Zeichen erscheint, muss mindestens eine Ziffer davor stehen. Die niederwertige Ziffer wird auf eine durch die Implementierung festgelegte Weise gerundet.

(Hervorhebung von mir)

Es hat nichts damit zu tun, wie 150 als Fließkommazahl im Speicher dargestellt wird (und tatsächlich wird sie zu einer double porque printf ist varargs).

3voto

Jerry Coffin Punkte 452852

Die Anzahl der Nullen, die Sie sehen, ist das Ergebnis der Standardpräzision, die von der %f printf Umwandlung. Sie hat im Grunde nichts mit der Umwandlung von Ganzzahlen in Fließkommazahlen zu tun.

3voto

Jonathan Leffler Punkte 694013

Denn die C-Norm (§ 7.19.6.1) besagt, dass in Ermangelung gegenteiliger Informationen, %f gibt 6 Dezimalstellen aus.

f,F Ein Doppelargument, das eine Gleitkommazahl darstellt, wird in dezimale Notation in der Art []ddd.ddd , wobei die Anzahl der Ziffern nach dem Dezimalpunkt gleich der Präzisionsangabe ist. Wenn die Genauigkeit fehlt, wird sie als 6 angenommen; wenn die Genauigkeit Null ist und das Flag # nicht angegeben ist, erscheint kein Dezimalpunktzeichen.

2voto

Pablo Santa Cruz Punkte 169147

Die Fließkommaarithmetik ist nicht exakt. printf zeigt nur die Anzahl der Nullen .

Aus der Dokumentation:

Die Standardanzahl der Ziffern nach der Dezimalkomma ist sechs, aber dies kann mit einem Präzisionsfeld geändert werden. Wenn ein Dezimalpunkt erscheint, muss mindestens eine Stelle vor dem Komma. Der "doppelte" Wert wird auf die richtige Anzahl von von Dezimalstellen gerundet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X