0 Daumen
114 Aufrufe

Frage:

Wie ist es möglich in der Programmiersprache C einen String in eine Zahl umzuwandeln die ein 1000er Trennzeichen enthält? Ich habe z.B. diesen String 1,000.21. Es handelt sich um eine Amerikanische Zahl. Wenn ich diese Zahl mit atof umwandle erhalte ich als float eine Ausgabe von 1. So wie es aussieht kann C nicht 1000er Trennzeichen erkennen. Deshalb möchte ich fragen welche Möglichkeit es gibt um den String in eine floating Zahl umzuwandeln.


Code:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  char zahl1[]="1,000.21";
 
  float number1 = atof(zahl1);
 
  printf("%f\n", number1);

  return 0;
}

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt:

Lösung der Aufgabe:

Um einen String, der ein 1000er Trennzeichen beinhaltet, korrekt in eine Fließkommazahl umzuwandeln, müssen wir zuerst die Trennzeichen aus dem String entfernen. atof (ASCII to float) kann nicht direkt mit Tausendertrennzeichen umgehen und interpretiert alles nach dem ersten nicht numerischen Zeichen (außer dem ersten Punkt) als irrelevant, deswegen wird 1,000.21 nur als 1 gelesen.

Wir können die Umwandlung in zwei Schritte durchführen:

1. Entfernen aller Kommas aus dem String.
2. Umwandeln des bereinigten Strings in eine Fließkommazahl mit atof.

Hier ist ein einfaches Beispiel, das diese Schritte in C durchführt:

c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Funktion, die Kommas aus einem String entfernt
void entferneKommas(char *str) {
    char *src, *dst;
    for (src = dst = str; *src != '\0'; src++) {
        *dst = *src;
        if (*dst != ',') dst++; // Kopiert nur Zeichen, die keine Kommas sind
    }
    *dst = '\0';
}

int main() {
    char zahl1[] = "1,000.21";
    
    // Entfernen der 1000er Trennzeichen
    entferneKommas(zahl1);

    // Umwandlung des bereinigten Strings in eine Fließkommazahl
    float number1 = atof(zahl1);
    
    printf("%f\n", number1);
  
    return 0;
}


Wichtige Punkte:

- Die Funktion entferneKommas iteriert durch den übergebenen String und verschiebt alle Nicht-Komma-Zeichen nach vorn. Das Ende des Strings wird mit \0 (dem Null-Zeichen) markiert, um das Ende des neuen Strings zu signalisieren.
- Nach dem Entfernen der Kommas kann atof den bereinigten String korrekt in eine Fließkommazahl umwandeln, da keine störenden Trennzeichen mehr enthalten sind.
- Dieses Verfahren funktioniert für Zeichenfolgen, die nach der amerikanischen Konvention formatiert sind, bei denen das Komma als Tausendertrennzeichen und der Punkt als Dezimaltrennzeichen dient.
Avatar von 4,6 k

Ein anderes Problem?

Stell deine Frage

Ähnliche Fragen

0 Daumen
1 Antwort
Gefragt 31 Mär 2021 von jasmin_89
0 Daumen
1 Antwort
0 Daumen
1 Antwort
0 Daumen
1 Antwort

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community