amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Tausenderstellen trennen [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

22.05.2003, 15:06 Uhr

THDany
Posts: 38
Nutzer
Mahlzeit!

Gibt es unter C eine Funktion mit der ich in double variablen die Tausenderstellen trennen kann?

Dany

[ - Antworten - Zitieren - Direktlink - ]

22.05.2003, 16:49 Uhr

Inferno
Posts: 157
Nutzer
Meinst Du zur Ausgabe z.B. auf den Bildschirm so wie

double a = 123456789

als 123,456,789.0 auszugeben?


[ - Antworten - Zitieren - Direktlink - ]

23.05.2003, 11:27 Uhr

THDany
Posts: 38
Nutzer
Ja genauso ist es.

[ - Antworten - Zitieren - Direktlink - ]

23.05.2003, 14:48 Uhr

Inferno
Posts: 157
Nutzer
Dann wirst Du ums selber-machen wohl nicht drumherum kommen. Die Formatierungen von printf erlauben nur Anzahl von Vor- und Nachkommanstellen. Es gibt zwar 'nen "Alternative Output Format" mittels des "#" - Zeichens, aber der hat bei printf eine andere Bedeutung als bei Basic ....


Ciao,

Inf.

[ - Antworten - Zitieren - Direktlink - ]

23.05.2003, 15:16 Uhr

DariusBrewka
Posts: 899
[Benutzer gesperrt]
Ist eigentlich auch nicht so schwer, zumindestens wenn der Zahlenbereich eingeschränkt ist (z.b. max 999 Milliarden)

z.B.

wert = 123456789123.12;

rest = irgendeine funktion die den Rest von Wert bestimmt (weiss nicht welche c(++) funktion das tut)

mrd = (int) (wert / 1000000000);
wert -= (mrd*1000000000);

mil = (int) (wert / 1000000);
wert -= (mil*1000000);

tausender = (int) (wert / 1000);
wert -= (tausender*1000);

den rest müsstest du noch so hinbiegen, dass die 0 am anfang abgeschnitten wird.



[ - Antworten - Zitieren - Direktlink - ]

23.05.2003, 16:50 Uhr

Inferno
Posts: 157
Nutzer
So, hat ein bisserl gedauert:

vorsicht, tippsfehler ....

code:
#include <stdio.h>

void double2string(char *buffer, int nachkomma, double value) {
    char buf2[128];
    char *buf = buf2;

    sprintf(buf2, "%.0f", value);
    
    int sl = strlen(buf2);
    while(sl > 0) {
        *buffer++ = *buf++;
        sl--;
        if(((sl % 3) == 0) && (sl)) *buffer++ = ',';
    }
    *buffer++ = '.';

    // Jetzt nachkommastellen:
    sprintf(buf2, "%f", value);

    buf = buf2;
    while(*buf++ != '.');

    while(*buf && nachkomma--) *buffer++ = *buf++;
    *buffer++ = 0;
}

int main() {
    char buffer[1024];
    double2string(buffer, 3, 1234567890.123456);
    printf("Resultat: %sn", buffer);
}



sollte ausgeben

Resultat: 1,234,567,890.123

Viel Spaß,

Inf.



[ Dieser Beitrag wurde von Inferno am 23.05.2003 editiert. ]

[ Dieser Beitrag wurde von Inferno am 23.05.2003 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

24.05.2003, 23:08 Uhr

THDany
Posts: 38
Nutzer
wow danke das funzt ja einwandfrei.

Ich habe die Funktion jetzt einfach so in mein Programm übertragen. Damit sollte ich dich natürlich auch in die Danksagung aufnehmen. Was würde dir denn zusagen was ich da hinschreibe?

[ - Antworten - Zitieren - Direktlink - ]

25.05.2003, 13:03 Uhr

Inferno
Posts: 157
Nutzer
Was ist es denn für ein Programm ???

Ach ja:

Du kannst noch nach der Nachkomma-While-Schleife ein

while(nachkomma--) *buffer++ = '0';

anhängen, wenn Du möchtest, daß immer so viele Nachkommastellen ausgegeben werden, wie Du im Parameter angibts ...

Ciao,

Inf.

[ - Antworten - Zitieren - Direktlink - ]

25.05.2003, 14:04 Uhr

THDany
Posts: 38
Nutzer
Das ist mein TH-Verbindung. Kannst du dir auf http://www.th-home.de runterhladen.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Tausenderstellen trennen [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.