mikrocontroller.net

Forum: Compiler & IDEs Runden von float?


Autor: tobiTob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

wie bekomme ich den Vorkommaanteil und den Nachkommaanteil eines Float 
Wertes?

Ich habe keine Funktion wie "Round" gefunden.
Nun wollte ich mir diese eben schreiben...

Wenn Nachkomma >0,5 dann Vorkomma + 1

Aus 12,5 soll 13,0 werden, aus 12,4 dann 12,0



Hat jemand eine Idee?

Gruß Tobi...

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int vorkammazahl;
vorkommazahl=floatwert+0.5;

Das sollte genau das gewünschte Ergebnis liefern.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber auch nur, wenn der Wert positiv ist.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, die negative Zahlen übersehe ich immer.
int vorkammazahl;
if (floatwert>=0)
  vorkommazahl=floatwert+0.5;
else
  vorkommazahl=floatwert-0.5;

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In C99 gibt es folgende 21 Rundungsfunktionen:

  {{,l,ll}{rint,round},nearbyint}{,f,l}

Sie unterscheiden sich in den Datentypen des Arguments und des
Ergebnisses, der Art und Weise, wie ein Nachkommaanteil von exakt 0,5
gerundet wird und ob ggf. eine inexact Exception ausgelöst wird.

Autor: kaplan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es gibt auch noch eine Funktion floor();
die schneidet einfach die nachkommastellen ab
zumindest in C++...
gruß

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> die schneidet einfach die nachkommastellen ab
> zumindest in C++...

Fast. floor() rundet stets "abwärts". Für negative Zahlen ist das nicht 
mehr mit dem einfachen Abschneiden des Nachkommateils identisch.

Autor: FBI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und als Gegenstück zu floor() gibts dann noch ceil().
Da wird immer "aufwärts" gerundet.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.