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.