Zahlenausgabe durch Punkte trennen

Sportsboy
also wie schon in der beschreibung steht:

ich hab keine ahnug wie ich es schaffe, dass die Zahl "10000" als "10.000" ausgegeben wird.

bzw. das soll bei jeder beliebigen zahl automatisch gemacht werden.

wäre über hilfe sehr dankbar Augenzwinkern

mfg
p-Logic
Also hier ist erstmal eine Funktion die dir das macht (hab heut nichts zu tun großes Grinsen )
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

 string i2string(int i) {
   std::ostringstream buffer;
   buffer << i;
   return buffer.str();
 }

 string dotTheInt(int i) {
   string str;
   int a = (i>0?i:i*-1), count = 4;
   while (a > 0) {
     if (--count > 0) {    
       str = i2string(a%10) + str; 
     } else {
       str = i2string(a%10) + "." + str; 
       count = 3;    
     }       
     a -= a%10;
     a /= 10;
   }
   return str;
 }
 
int main(int argc, char *argv[])
{
    int i = 1000000000;
    cout << dotTheInt(i) << "\n";
    system("PAUSE");
    return 0;
}

Lässt sich sicher noch optimieren.
Sportsboy
erstmal fettes fettes THX für das posting Augenzwinkern

ich werde das gleich mal ausprobieren.
allerdings verwender ich nur den typ "double" ... mal schaun, ob ichs gebacken kriege das umzuschreiben ....


funzt das eigentlich auch mit Visual C++?? weil so wirklich versteh ich das script nicht... Mauer verwirrt :scheisspc:
p-Logic
Obs mit VisualC++ geht, weiß ich nicht, aber die Sache mit dem double könnte Probleme geben...
Da double ja AFAIK ein Gleitkommawert ist, geht bei der Umwandlung in eine Ganzzahl (int) ja logischerweise die Information "hinter dem Komma" verloren.

Hab das mal geändert.
Und die wichtigsten Sachen erklär ich hier nochmal
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
#include <iostream>
#include <sstream>
#include <string>
#include <math.h>
// sstream und math werden von der funktion zwingend erwartet

using namespace std;

 string i2string(int i) {
   std::ostringstream buffer;
   buffer << i;
   return buffer.str();
 }
// die func i2string konvertiert einen Int in einen String, wie ist hier egal ;P
// Die Zahl wird in einen StringStream ausgegeben (wie nach cout)
// und danach der sstream als string übergeben

//----------Hier fängt die eigentliche func an---
 string dotTheInt(double i, int accuracy) {
   string str;
   int mul = pow(10.0, accuracy);
   str = "," + i2string(((int)((i>0?i:i*-1)*mul))%mul);
// Hier wird die Genauigkeit festgelegt, mit der die Nachkommastellen übernommen werden.
// 3 wäre z.B 0.123

// Dabei ist mul der Multiplikator, mit dem die Nachkommastellen multipliziert werden
// 0.123 => 123 Diese Zahl wird dann an den String angehängt, nach einem Komma
// (Ich verarbeite den String rückwärts)
// Der Part (i>0?i:i*-1) gibt den Betrag von i aus (also immer positiv)

   int a = (int)(i>0?i:i*-1), count = 4
// a ist der Betrag von i ohne Nachkommastellen


// In dieser Schleife wird die Zahl einzeln in einen String zusammengesetzt
// Dabei wird an jede 3. Stelle ein Punkt gesetzt

   while (a > 0) {
     if (--count > 0) {    

       str = i2string(a%10) + str; 
       // Die letzte Ziffer von a (a modula 10) ohne Punkt

     } else {

       str = i2string(a%10) + "." + str; 
       // 3. Stelle erreicht => mit Punkt

       count = 3;    
       // Zähler zurück setzen

     }       
     a -= a%10;
     a /= 10;
// Hier wird die letzte Ziffer abgeschnitten und mit der nächsten weitergearbeitet

   }
   str = (i>0?"":"-") + str;
// Zum schluss wird geprüft, ob die Zahl positiv oder negativ ist und evtl ein - davor gesetzt

   return str;
 }
 
int main(int argc, char *argv[])
{
    double i = 100000.1234;

    cout << dotTheInt(i, 3) << "\n";
// 1. Parameter: Das was du konvertieren willst
// 2. Parameter: Wie viele Nachkommastellen übernommen werden sollen

    system("PAUSE");
    return 0;
}
Prophet
Als anmerkung:

Es wäre vll sinnvoller die tausender durch hochkommas also ' abzutrennen damit der unterschied zwischen komma und trenner klar wird...
p-Logic
Form Fetischist Zunge raus

Das überlasse ich mal Sportsboy, wie er das handhaben will großes Grinsen
Einfach den Punkt in Zeile 22 und das Komma in Zeile 46 durch eine beliebige, ergonomisch gut erkennbare Zeichenfolge ersetzen.

Ich habe einfach mal die 123.456,789 Formatierung gewählt, 123'456.789 sieht natürlich auch schön aus Augenzwinkern
bluescreen
ich weiß nich vieleicht seid ihr auf nem höheren Programmier nivo und redet über was anneres aber kan man das nich einfach so machen:

#include <iostream.h>
#include <conio.h>

int main() {
cout << "10.000" << endl;

getch();
return 0;
}