Skip to content

Fließender Ärger

:grrr: Der Datentyp float ärgert mich gelegentlich immer wieder, wenn der letzte Kontakt zu lange her ist, und man dann nicht an's Runden denkt:
#include "stdio.h"

void main()
{
    float f = 35.91;

    printf("%.2f => %i / %i\n", f, (int)(f*100), (int)(f*1000));
};
Das erwartete Ergebnis ist
35.91 => 3591 / 35910
Das tatsächliche ist
35.91 => 3590 / 35909

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

ths

void main ist aber nicht ANSI ...
und in der c.l.c FAQ steht auch einiges über float, runden und so.

Manuel Schmitt (manitu)

(1) das war nur ein Quick'n'Dirty-Beispiel
(2) Ja, aber ich finde, bei float vergisst man das sehr schnell, weil man es oft mit Decimal verwechselt

Dirk

(1) So sieht’s auch aus ;) scnr

sarc

Nicht zu vergessen, dass es 35.91F heißen sollte... ;-)

arghl

Wie sähe der Quelltext denn richtig aus?

sarc

Siehe http://c-faq.com/fp/round.html

(int)(f*100 + 0.5)

Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.

Um maschinelle und automatische Übertragung von Spamkommentaren zu verhindern, bitte die Zeichenfolge im dargestellten Bild in der Eingabemaske eintragen. Nur wenn die Zeichenfolge richtig eingegeben wurde, kann der Kommentar angenommen werden. Bitte beachten Sie, dass Ihr Browser Cookies unterstützen muss, um dieses Verfahren anzuwenden.
CAPTCHA

BBCode-Formatierung erlaubt
Formular-Optionen