Forum: PC-Programmierung Kommastellen ermitteln


von Rupplyn (Gast)


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!

von Alex (Gast)


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.

von Rupplyn (Gast)


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...

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Rupplyn (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Björn (Gast)


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.

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.