mikrocontroller.net

Forum: PC-Programmierung Kommastellen ermitteln


Autor: Rupplyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,
habe folgendes Problem: ich möchte von einer double-Zahl die Anzahl der
Nachkommastellen ermitteln.
Gibt der Benutzer beispielsweise 2.45 ein, möchte ich 2 erkennen.

Habe mir das mal folgendermaßen vorgestellt (wobei k die double-Zahl
ist):

    while (k>0)
      {
        if (k<1)
        {
        k = k * 10;
        zaehler = zaehler + 1;
        }
        else
        {
        k = k - 1;
        }
      }

Das ganze funktioniert allerdings nicht richtg. denke es liegt, daran,
dass z.b. eine double-1 nicht 1 sondern nur ungefähr eins ist...

Hat jemand von euche ne Idee?

PS: geschrieben als Consolen-Anwendung in cpp!

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Gibt der Benutzer beispielsweise 2.45"

Also gibt der Benutzer einen String ein, in dem parst du auf Punkt oder
Komma und bestimmst die Anzahl der Zeichen bis zum Ende des String - das
wars.

Autor: Rupplyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, mein Problem war, dass ein double-wert übergeben werden soll und ich
keine funktion gefunden hatte um diesen wert in string zu konvertieren.
man finden nur haufenweise funktionen von string to int/double/...
hab jetzt doch etwas gefunden:
gcvt(,,)
mit dem string geh ich dann natürlich genauso um wie du's gesagt
hast...

trotzdem thanks...
läuft bereits wie's soll...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Ansatz ist ... reichlich ungünstig. Rundungsungenauigkeiten können
dazu führen, da0 2.5 als 2.4999999999999999 ausgedrückt wird, was dann
natürlich irrsinnig viele Nachkommastellen hat.

Auch kann so nicht erkannt werden, wenn der Benutzer "2.00" eingibt.
Das sind nämlich auch zwei Nachkommastellen.

Bestimme die Anzahl anhand des vom Benutzer eingegebenen Strings, alles
andere ist Quark.

Autor: Rupplyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es wurde mir eben hier von einem anderen programmteil explizit ein
double-wert übergeben. mein erster gedanke war auche eine lösung über
die string-länge und die position des pkts. allerdings hatte ich nach
reichlich googlen keine passende fkt gefunden, den double-wert in einen
string zu konvertieren.
hab ja in meinem 2. post geschrieben, dass ich nun doch was gefunden
habe: gcvt(;;).
Damit habe ich meien string und kann den anderen ansatz verwerfen.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch wenn "gcvt" einen double in einen string umwandelt, ist damit
trotzdem nicht die Anzahl der von einem Benutzer eingegebenen
Nachkommastellen ermittelbar - das von mir bereits gesagte behält
Gültigkeit.

Vor allem belügst Du Dich beim Einsatz von gcvt selbst - die Anzahl der
gewünschten Nachkommastellen musst Du beim Aufruf angeben.

Damit kann gcvt nicht verwendet werden, um herauszufinden, wieviele
Nachkommastellen eine floating-Point-Zahl hat.

Der Ansatz bleibt Quark.

Autor: Björn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal abgesehen davon, dass das mit den Nachkommastellen so nie richtig
funktionieren wird - wurde ja schon mehrfach erwähnt - verwendet man in
c++ zur Konvertierung stringstreams. Gehört zur STL.

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.