Forum: Compiler & IDEs Float in int


von Johannes (Gast)


Lesenswert?

Hallo,

ich würde gerne eine Float in die erste Stelle vor dem Komma und nach 
dem Komma zerlegen. Der Floatwert kann niemals größer als 9 werden.

Jetzt hab ich mir folgendes überlegt um die jeweils erste Stelle zu 
bekommen:

durchschnitt=gesamtpins/wuerfe;
vorkomma=(int)durchschnitt;
durchschnitt=durchschnitt-vorkomma;
durchschnitt=durchschnitt*10;
nachkomma=(int)durchschnitt;

Leider funktioniert das nur für die Vorkommastelle, nicht für die 
Nachkommastelle.

Wo liegt mein Denkfehler? Oder bin ich auf irgendwas beim GCC 
reingefallen?
Das ganze soll auf einem ATMEGA8515 laufen.

Danke schonmal :-)

von Dominik G. (moondryl)


Lesenswert?

Probiere mal folgendes (nicht getestet):

1
durchschnitt=durchschnitt-(float)vorkomma;
2
durchschnitt=durchschnitt*10.0;

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Nimm Standardfunktionen wie frexp oder ldexp.

1) Bahandle Sonderfälle wie INF, NaN, etc.

2) Zerlege die Zahl in Mantisse und Exponent, z.B. mit frexp.

3) Konvertiere die (normierte) Mantisse in einem int.  Dazu verwendet 
man die Signatur die du kennen musst und Funktionen wie ldexp.

von Peter II (Gast)


Lesenswert?

sehe auch kein Fehler, debugge es doch einfach. Dann sieht du in jedem 
Schritt was los ist.

es gibt dafür auch eine Funktion

http://en.cppreference.com/w/c/numeric/math/modf

von Johannes (Gast)


Lesenswert?

Das Problem scheint bei der Berechnung zu liegen

gesamtpins und wuerfe sind jeweils uint_16t und durchschnitt float.

Dabei scheint irgendwas schief zu gehen, aber was?

von Peter II (Gast)


Lesenswert?

Johannes schrieb:
> gesamtpins und wuerfe sind jeweils uint_16t und durchschnitt float.

dann wird die Rechnung in int gemacht!
1
durchschnitt=(float)gesamtpins/wuerfe;

sollte da helfen, aus dem Grund ist es immer Sinnvoll vollständigen code 
zu posten.

von Johannes (Gast)


Lesenswert?

Peter II schrieb:
> Johannes schrieb:
>> gesamtpins und wuerfe sind jeweils uint_16t und durchschnitt float.
>
> dann wird die Rechnung in int gemacht!
> durchschnitt=(float)gesamtpins/wuerfe;
>
> sollte da helfen, aus dem Grund ist es immer Sinnvoll vollständigen code
> zu posten.

Super Danke das wars!

Und wieder was dazugelernt :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.