Zahlen übersichtlicher darstellen lassen
-
Hallo liebe Community,
das ist mein 1. Post also bitte um Nachsicht, wenn nicht alles perfekt ist.Also ich habe ein Programm (in Konsole) geschrieben, welches als Ergebnis rellativ hohe Zahlen (int) ausliefert (Geht um das errechnen eines Boosters, ist hier aber nicht relevant).
Die Zahlengröße/Zifferstellen variieren je nach Eingabe.
Wenn ich nun eine Zahl eingebe, sagen wir mal 7069 und da kommt dann später 1306351 raus.
Kann ich es irgendwie so darstellen lassen, dass nach der Rechnung dann 1.306.351 oder
1 306 351 steht, und dass auch auf die Zahl z.b. 156886548 anwendbar ist?Wäre euch sehr dankebar für Antworten!

Grüße
simin
-
Trenne Darstellung und Daten! Wie genau hältst du denn deine Daten? In einer Datenbank? Textdatei? Wie auch immer, lasse die Daten in einem Format gespeichert, mit dem du gut arbeiten kannst, aber gib sie für den Benutzer ruhig in einem besser lesbaren Format aus. Eine Funktion, die beispielsweise in einem String von hinten nach vorne nach je 3 Zeichen einen Punkt einfügt, sollte ja nicht so schwierig sein.
-
In der Quelldatei nur
die ergebnisse sind momentan als integer deklariert
also wäre deine idee, einfach in strink umformen und dann (irgendwie -bin wirklich nen anfänger in c++) punkte von hinten setzen!?
-
Genau, konvertiere nach
std::stringund formatiere ihn nach deinen Vorstellungen.
-
Das Thema ist nicht unbedingt völlig trivial - Habe dazu hier eben was gefunden und wozu jetzt das Rad neu erfinden:
-
Alternativ kannst du auch den dafür vorhergesehenen Weg verwenden:
#include <iostream> #include <string> #include <iomanip> class grouping : public std::numpunct<char> { std::string do_grouping() const { return "\003"; } // 3 Zeichen lang char do_thousands_sep() const { return ' '; } // Leerzeichen als Trennung }; int main() { using namespace std; // Verstellt die Ausgabe von Zahlen auf cout cout.imbue(locale(cout.getloc(), new grouping)); int result = 1306351; int anothernumber = 156886548; // Ganz normal Zahlen ausgehen, diesmal wird es schön cout << result << '\n'; cout << anothernumber << '\n'; return 0; }Vielleicht verstehst du (noch) nicht alles, aber das macht nicht sonderlich viel, denn die Benutzung ist dafür einfach.
-
fratze schrieb:
Alternativ kannst du auch den dafür vorhergesehenen Weg verwenden
[...]
Vielleicht verstehst du (noch) nicht alles, aber das macht nicht sonderlich viel, denn die Benutzung ist dafür einfach.Also ich verstehe nahezu =0
Das ist aber nicht soo wichtig, da ich getestet habe und hat funktioniert.
Nun aber noch letze wichtige Frage:
Wie binde ich das ganze in mein Programm ein?
Ich habe mal irgendwas von unterprogrammen und un gehört, aber wie gesagt nicht so viel ahnung davon.
Und wenn ich versuche einfach Quelltext natürlich ohne erneut biliotheken und so aufzurufen, dann bekomme ich fehlermeldungen in meinem Programm (an total anderer Stelle) die es vorher nicht gab.
Bsp: "73 expected `;' before "else" "
Natürlich ist davor nen ";" und vorher ging es auch, aber nun nicht mehr..:D
grüße
-
Zeig mal Code.
-
simin2210 schrieb:
fratze schrieb:
Alternativ kannst du auch den dafür vorhergesehenen Weg verwenden
[...]
Vielleicht verstehst du (noch) nicht alles, aber das macht nicht sonderlich viel, denn die Benutzung ist dafür einfach.Also ich verstehe nahezu =0
Na es ist doch einfach:
Du erstellst eine Klasse, die du von einem locale facet
numpunct<char>ableitest (die wiederum vonlocale::facetableitet, der Basisklasse) - ein facet für die Ausgabe von Zahlen. Da redefinierst du einige Funktionen nach deinem Belieben. Anschließend setzt du das locale fürstd::cout.localealso ist eine Klasse die für Ortsabhängige Streaming-Operationen verantwortlich ist.
do_thousand_sep steht für: thousands separator, das Trennzeichen für Tausendergrüppchen (1 000 000 ...), was wir hier als Leerzeichen "setzen". do_grouping legt fest, wiviele Ziffern beieinander stehen( man kanns auch so machen: 1 0000 0000), hier (Edit: hier, also im Code oben) 3. DielocaleKlasse übernimmt die Verantwortung das hoffentlich allokierte facet freizugeben (mit delete).Der relevante Code ist ca. 3-5 Zeilen lang. Schau in die Referenz, wenn du mehr überschreibbare Funktionen suchst...
Zum Beispiel könntest du nochchar do_decimal_point() const {return ',';}
-
OMG! Ihr wollt einem absoluten Anfänger wirklich was von Klassen etc. erzählen?!
1. versteht er davon rein gar nichts (wie er schon sagte)
2. gibts es für einen Anfänger weitaus besser geeignete Methoden einen Punkt an jede 3. Stell zu schreiben ; )
-
Wir wollen hier gar nichts. Hacker will nur wieder mal zeigen, was er tolles kann.
-
_matze schrieb:
Wir wollen hier gar nichts. Hacker will nur wieder mal zeigen, was er tolles kann.
Stimmt ja gar nicht. Mir ist nur wieder langweilig.

(Das ich darüber hinaus nichts kann ist mir klar)Außerdem wusste ich gar nicht, dass er ein so kürzlich angefangener Anfänger ist...