Forum: Mikrocontroller und Digitale Elektronik Runden in *.2er Schritten


von Sven (Gast)


Lesenswert?

Hi,
ich habe einen Float-Wert, den ich auf eine Nachkommastelle genau 
Anzeigen möchte und zwar nur auf GERADE Nachkommastellen z.B. 1.0, 1.2, 
1.4, 1.6, 1.8, 2.0.

Ich nutze CodeVisionAVR.
Wie stelle ich das am Einfachsten an?

von Hannes (Gast)


Lesenswert?

float i;
int i;

a+=0.5;
i=(int)(5*a);
a=i/5;

von Sven (Gast)


Lesenswert?

Danke für die Antwort!

Irgendwie versteh ich es aber nicht. Nehmen wir z.B.: float a = 2.3

->
a+=0.5;         //2.3+0.5=2.8
i=(int)(5*a);   //i=5*2.8=14
a=i/5;          //a=14/5

von Reinhard R. (reirawb)


Lesenswert?

Hannes schrieb:
> float i;
> int i;
>
> a+=0.5;
> i=(int)(5*a);
> a=i/5;

Ohne jetzt Ahnung von C zu haben, werfe ich mal folgendes in die Runde:

float a;
int i;

i=(int)(5*a+0.5);
a=i/5;

Reinhard

von Bernd S. (wird_schon)


Lesenswert?

Morgen,

float a = 2.3;
a /= 0.2;
a = round(a);
a /= 5;

von Karl H. (kbuchegg)


Lesenswert?

Reinhard R. schrieb:

> float a;
> int i;
>
> i=(int)(5*a+0.5);
> a=i/5;

fast

  a = i / 5.0;

(Und die Frage, ob a auch negativ sein kann, drängt sich auch noch auf. 
In dem Fall muss man bei der Rundungskorrektur aufpassn)

von Reinhard R. (reirawb)


Lesenswert?

@Karl heinz Buchegger

OK, wer recht hat gibt einen aus :-)

Reinhard

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.