int > float Umwandlung

Gast #1446934
Lesenswert?

hi

ich gebe mit folgender Zeile die Größe einer Datei aus:
1
printf("%ld \n\r",file.length);
Das klappt auch, mit dem Handycap, dass ich bei einer 3,5MB Datei 
3500000 ausgedruckt bekommen. Nun wollte ich das ganze in MB Form 
ausgeben lassen:
1
printf("%2.2f MB \n\r",(unsigned float)(file.length/1000000));
das klappt aber nicht, ich bekomm nur MB ausgedruckt. Hab ich was 
übersehen?
#1447219
Lesenswert?

Leider hat die Funktion vom Link einen Bug

probier mal -1.01 in einen String um zu wandeln -> "-1.-1"

1. Vorzeichen wird auch bei Nachkommastellen ausgegeben
2. Führende Nullen der Nachkommastellen werden "vergessen"

hier ein 1-Zeiler der obige Probleme behebt:
 sprintf(str, "%i.%02i\n", (int)f, abs((int)(f*100))%100);

ad 1.)
- abs() entfernt das Vorzeichen der Nachkommastellen
- (f*100)%100 liefert dir die ersten beiden Nachkommastellen
    Modulorechnung find ich persönlich schöner und vor allem kürzer, als 
diese Doppelmultiplikation und Subtraktion (aber das ist wohl 
Geschmackssache)

ad 2.)
- "%02i" sorgt dafür, daß das Ergebnis aus mindestens 2 Zeichen besteht. 
Sonst wird mit 0 aufgefüllt. Wegen oben (Modulo 100) hast du maximal 2 
Stellen ==> du hast immer genau 2 Nachkommastellen
Gast #1447263
Lesenswert?

aja, habs geschnallt, du meintest bei negativen floats... das hab ich 
nicht probiert, da die datei länge ohnehin nur positiv sein kann...

was mich allerdings noch etwas zu schaffen macht, ich bekomm z.B. 
folgende Ausdrucke:

2.23 MB
4.43 MB
3.4 MB
8.01 MB

Das heißt, wenn die 2. Nachkommastelle 0 ist, wird nur eine ausgedruckt, 
was ja auch klar ist. Mit auffüllen komm ich da aber nicht weiter, da 
immer vor der Zahl aufgefüllt wird und das macht bei Nachkommastellen 
wenig Sinn...

eine umfangreiche Abfrage mit if usw. ist mir aber zu aufwendig.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren