Kommastellen ermitteln

Gast #385704
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!
Gast #385706
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...
Persönliche Seite #385707
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.
Gast #385708
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.
Persönliche Seite #385709
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.
Gast #385710
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

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