strtod

___ qstnhdr ___ Umwandlung von char * in float oder double ___ tag123c ___ C ist eine universelle Computerprogrammiersprache, die für Betriebssysteme, Bibliotheken, Spiele und andere Hochleistungsanwendungen verwendet wird. Dieses Tag sollte bei allgemeinen Fragen zur C-Sprache verwendet werden, wie in der Norm ISO 9899: 2011 definiert. Fügen Sie ggf. ein versionsspezifisches Tag wie c99 oder c90 für Fragen zu älteren Sprachstandards hinzu. C unterscheidet sich von C ++ und es sollte nicht mit dem C ++ - Tag kombiniert werden, wenn ein rationaler Grund fehlt. ___ qstntxt ___

Ich habe einen Wert, den ich aus einer Datei eingelesen habe und der als Char * gespeichert ist. Der Wert ist eine monetäre Nummer, #. ##, ##. ## oder ###. ##. Ich möchte das char * in eine Zahl umwandeln, die ich in Berechnungen verwenden kann, ich habe atof und strtod ausprobiert und sie geben mir nur Müllnummern. Was ist der richtige Weg, um dies zu tun, und warum ist die Art, wie ich es falsch mache?

Das ist im Wesentlichen was ich mache, nur der char * -Wert wird aus einer Datei eingelesen. Wenn ich die Variablen temp und ftemp ausdrucke, sind sie nur Müll, gigantische negative Zahlen.

Noch eine Bearbeitung:

Ich führe genau das in gcc

aus %Vor%

}

und meine Ausgabe ist Preis: 3344336.000000, 3344336.000000

Bearbeiten: Hier ist mein Code

%Vor%

meine Eingabedatei ist ein sehr einfacher Name, Wertepaare wie folgt:

%Vor%

mit dem Wert, der Dollarbeträge ist

Gelöst: Ich danke Ihnen allen, ich habe% d anstelle von% f und hatte nicht die richtigen Header enthalten.

    
___ answer10605834 ___

Der von Ihnen gepostete Code ist korrekt und hätte funktionieren sollen. Aber überprüfe genau, was du in %code% hast. Wenn der richtige Wert zu groß ist, um dargestellt zu werden, geben Funktionen einen positiven oder negativen %code% zurück. Überprüfe, was du in %code% gegen maximale Werte hast, die %code% und %code% auf deinem Computer darstellen können.

Überprüfen Sie diese Seite auf %code% reference und diese Seite für %code% reference .

Ich habe das Beispiel ausprobiert, das Sie in Windows und Linux zur Verfügung gestellt haben, und es hat gut funktioniert.

    
___ answer10606023 ___

Sie vermissen ein Include: %code% , daher erstellt GCC eine implizite Deklaration von %code% und %code% , was zu Garbage-Werten führt.

Und der Formatbezeichner für double ist %code% , nicht %code% (also für ganze Zahlen).

%Vor%     
___ tag123rtrtod ___ strtod ist die C-Standardbibliotheksfunktion zum Konvertieren einer ASCII-Zeichenfolge in eine Fließkommazahl. ___ answer10606172 ___
%Vor%

Das ist dein Problem. Da die Argumente vom Typ %code% und %code% sind, sollten Sie %code% für beide verwenden (da %code% eine variadische Funktion ist, %code% wird zu %code% hochgestuft).

%code% erwartet das entsprechende Argument vom Typ %code% , nicht %code% .

Variadische Funktionen wie %code% kennen die Typen der Argumente in der Variablenargumentliste nicht wirklich; Sie müssen es mit dem Konvertierungsspezifizierer angeben. Da du %code% gesagt hast, dass das erste Argument ein %code% sein soll, wird printf die nächste %code% Bytes aus der Argumentliste nehmen und sie als einen ganzzahligen Wert interpretieren; daher die erste Müllnummer.

Nun ist es fast garantiert, dass %code% & lt; %code% , also wenn %code% die nächste %code% Bytes von der Argumentliste übernimmt, beginnt es wahrscheinlich mit dem mittleren Byte von %code% , anstatt mit dem ersten Byte von %code% ; daher die zweite Müllnummer.

Verwenden Sie %code% für beide.

    
___ tag123atof ___ atof () ist die C-Laufzeitbibliotheksfunktion zum Konvertieren der ASCII-Darstellung einer Zahl in ein Fließkomma-Double. ___
3
Antworten

Umwandlung von char * in float oder double

Ich habe einen Wert, den ich aus einer Datei eingelesen habe und der als Char * gespeichert ist. Der Wert ist eine monetäre Nummer, #. ##, ##. ## oder ###. ##. Ich möchte das char * in eine Zahl umwandeln, die ich in Berechnungen verwenden kann,...
15.05.2012, 17:11