"Länge" einer Zahl ermitteln
-
Hallo,
ich möchte die "Länge" (sprich die Anzahl der Stellen) einer Zahl ermitteln. Das brauche ich, um die Feldbreite variabel setzen zu können....
Natürlich könnte ich die Zahl in einen string umwandeln und dann mit stlen die Länge ermitteln, allerdings würde ich gerne wissen, ob es eine "einfachere" bzw. weniger umständliche Methode gibt...
-
-
Ah, okay.
Hab' mich für die log()-Methode entschieden
double digits(double x) { return log10(x)+1; }
-
Weil die Anzahl Stellen oft eine Fliesskommazahl ist, oder?

-
Das brauche ich, um die Feldbreite variabel setzen zu können
könntest du das mal erläutern, bitte? Oo
klingt nämlich komisch ^^
-
Nexus schrieb:
Weil die Anzahl Stellen oft eine Fliesskommazahl ist, oder?

Ahja, hab ich im Eifer des Gefechtes wohl übersehen.
unskilled schrieb:
Das brauche ich, um die Feldbreite variabel setzen zu können
könntest du das mal erläutern, bitte? Oo
klingt nämlich komisch ^^Dazu:
http://uvok.uv.funpic.de/public/terminal.jpgAbhängig von der Eingabe soll die Feldbreite geändert werden

-
@andy89,
Kennst du I/O Stream Manipulatoren? Über diese kannst du Feldbreiten setzen und auch die Füllzeichen, falls die Zahl kleiner als die Feldbreite ist:
http://www.cplusplus.com/reference/iostream/manipulators/
http://www.cplusplus.com/reference/iostream/manipulators/setw/
http://www.cplusplus.com/reference/iostream/manipulators/setfill/Grüssli

-
Dravere schrieb:
@andy89,
Kennst du I/O Stream Manipulatoren? Über diese kannst du Feldbreiten setzen und auch die Füllzeichen, falls die Zahl kleiner als die Feldbreite ist:
http://www.cplusplus.com/reference/iostream/manipulators/
http://www.cplusplus.com/reference/iostream/manipulators/setw/
http://www.cplusplus.com/reference/iostream/manipulators/setfill/Grüssli

Mit setwidth / setfill habe ich es ja gemacht...

giral_c = kredit_c * giral_p; cout << setw(15) << "Giralgeld: "; cout << setw(width) << giral_c << endl; giral_s += giral_c;Übrigens, was ist eigentlich der Unterschied zwischen cout << setw() und cout.width() ? (Außer, dass das eine ein Manipulator und das andere eine Methode ist)
-
andy89 schrieb:
Übrigens, was ist eigentlich der Unterschied zwischen cout << setw() und cout.width() ? (Außer, dass das eine ein Manipulator und das andere eine Methode ist)
Das eine ist ein Manipulator und das andere eine Methode :p
Im Link zur Referenz zum Manipulator steht auch:
Behaves as if a call to the stream's member ios_base::width with n as its argument was made.
Grüssli
-
Nehmen wir an, du hast eine double zahl = 123.45 und willst die Stellen ermitteln:
- fang bei Kommastellen an zu zählen, hier 2 (zahl wird min. 4 Stellen besitzen: "0.00") ;
- Nimm zahl und teile sie durch 10, bis = 0; stellen++;
- Als Integer vergleichen oder Kommastellen abschneiden.(dürfte um einiges schneller sein als log.)
Viel Erfolg.