FLOAT BERECHNUNG

Gast #36774
Lesenswert?

Hallo

...und zwar sollte die variable [test] rechnerisch am ende den wert 8
haben...
sie hat aber den wert 7.

sind das rundungsfehler ?

void main ()
{
  float value;
  unsigned char test;

  value = 1.8;

  test = 1;

  value = (value-(float)test)*10;

  test = (unsigned char)value;

  while(1);
}

SO WÜRDE ES FUNKTIONIEREN:

void main ()
{
  float value;
  unsigned char test;

  value = 1.8;

  test = 1;

>>>  value = (value*10-(float)test*10); <<<

  test = (unsigned char)value;

  while(1);
}

wieso?

danke
Gast #36775
Lesenswert?

Hallo Stephan !!

Bei einer Konvertierung von float nach int werden die
Nachkommastellen immer abgeschnitten.

(value-(float)test)*10 ergibt in deinem Fall 7.9999952

abgerundet also 7.

Wenn du dies umgehen willst kannst du entweder immer versuchen es auf
deine 2. Art zu machen, oder schöner du verwendest die Funktion
ceil (). Müssest du in Math.h finden. Diese rundet einen float-wert
auf die nächste ganze Zahl auf.

Andre
Gast #36778
Lesenswert?

>einfach vor dem cast nach int 0,5 dazuaddieren und fertig.

Das ist einfach falsch.
Bei einer Rundung muß immer das Vorzeichen beachtet werden. Es gibt
zwar Teufel, die davon ausgehen, daß negative Zahlen nicht auftreten,
aber das sind eben die Teufel !
Gast #36785
Lesenswert?

floor () und ceil () geben beide float-Werte zurück.
Diese mußt du dann noch nach int konvertieren.

Am besten schaust du dir einfach mal eine Beschreibung der
Funktionen an..

Meiner Meinung nach ist dies die sauberste Art zu runden. Welche
du verwendest hängt von deiner Anwendung ab.
Es gibt soweit ich weiss auch eine Funktion die "richtig" rundet,
aber mir fällt der Name gerade nicht ein. :-)

Andre

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