Unterschiedliche Nachkommazahlen in C?

1 Antwort

Bei der Umwandlung in Fließkomma Typ double geht diese Information verloren, es ist also so nicht möglich.

Man weiß bei "double", definitiv nicht, ob da mal 0.1700 oder 0.17 stand.

Man müsste also entweder die Anzahl der angegebenen Nachkommastellen in einem int-Wert zusätzlich speichern oder die ganze Zahl als String speichern.

Liest du die CSV-Datei mit einer Library ein, oder "von Hand" ? Parsen ist ja oft eine größere Aufgabe...

KarlRanseierIII  27.02.2024, 12:47
Man müsste also entweder die Anzahl der angegebenen Nachkommastellen in einem int-Wert zusätzlich speichern oder die ganze Zahl als String speichern.

Oder eben eine Form von BCD nutzen, was je nach Weiternutzung sowieso sinnvoll wäre - oder alternativ etwas aus dem BEreich arbitrary precision, wo diese Information auch mitgepflegt wird.

1
scatha  29.02.2024, 10:22
@KarlRanseierIII

Ja, eine Datenklasse, die "alles notwendige speichert", und auch die Parsing und Format-Funktionen enthält, wäre m.E. auch der übersichtlichste Ansatz, sogar bei kleineren Projekten. Vermutlich gibt es solche Lösungen bereits.
Falls es nur um Einlesen und Ausgeben geht, ohne Weiterverarbeitung, kann man sich natürlich auch mit simplen Strings behelfen.

Beim Parsen von CSV-Files, die von einer Tabellenkalkulation ausgegeben werden, sollte man auch darauf achten, dass Texte in Hochkommata stehen und Escape-Charaktere enthalten können.

Daher wäre eine simple "Split"-Funktion mit Trennzeichen ";" gefährlich

Auch dieses Rad wurde selbstverständlich schon hundertmal gebaut

https://www.google.com/search?q=csv+parse+c%2B%2B

https://duckduckgo.com/?q=read+csv+file+in+c&t=h_&ia=web

0
J0T4T4  27.02.2024, 14:50

So richtig geht die Information ja nicht verloren. Es müssen einfach nur die trailing zeros nicht rausgeschrieben werden.

0
scatha  01.03.2024, 14:45
@J0T4T4

Wo soll die Information über die Anzahl der ausgewiesenen Nachkommastellen in einem Fließkommawert gespeichert sein ? Nirgendwo ! Es ist ein reiner numerischer Datentyp. 5,100 und 5,1 sind derselbe Wert, aber sollen vermutlich unterschiedliche Meßgenauigkeiten angeben.

0