int > float Umwandlung

Gast #1446934
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?
Gast #1446974
-ich benutze C18, wo kann ich sehen, ob printf float unterstützt?

-ich hab versuchsweise unsigned weg gelassen, Ergebnis ist allerdings 
das selbe...
#1446976
a/b

wenn a ein long ist und b ein long ist, dann wird eine Ganzzahldivision 
gemacht mit einem long Ergebnis. Du kannst das Ergebnis danach casten 
wie du lustig bist, das interessiert die Division nicht. Zum Zeitpunkt 
des Casts ist das Kind schon in den Brunnen gefallen.
#1447219
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 #1447260
bei mir funktionierts...:


unsigned int whole, part;

whole=(int)((float)file.length/1000000);
part =(int)((float)file.length/10000)-whole*100;

printf("%2d.%2d MB \n\r",whole,part);
Gast #1447263
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.