2017-08-17 23 views
0

Ich habe Probleme mit STRTOF-Konvertierungen, einige Werte funktioniert es gut, aber eine andere gibt es +1 oder -1 des Werts zurück. Mein Programm liest den Wert aus einer Datei, aber der Einfachheit halber habe ich versucht, den Wert direkt auf strtof zu setzen, und es hat das gleiche Verhalten.C: STRTOF falsche Konvertierung von einer Einheit

Mein einfachen Code:

#include <stdlib.h> 

int main(int argc, char **argv) 
{ 
    printf("%f", strtof("17309217",NULL)); 
} 

Es gibt

17309216.000000 

Der gleiche Wert, den es gibt, wenn ich "17309216" oder "17309215" zu konvertieren.

Ich habe einige weitere Tests gemacht und es scheint ein "Muster", "17309214" funktioniert gut, aber "17309213", "17309212" und "17309211" alle zurück "17309212". Danach funktioniert "17309210" gut, aber "17309209", "17309208" und "17309207" geben "17309208" usw. zurück.

Was ist die Erklärung für dieses Verhalten? Jetzt konvertiere ich die Zeichenfolge mit anderen Methoden, ich brauche keine Methode, um sie zu konvertieren. Ich möchte nur wissen, warum strtof das macht, also kann ich entscheiden, wo ich es verwenden kann und wo nicht.

Ich habe einige andere Fragen zu falschen Konvertierungen gelesen, aber alle beziehen sich auf die Dezimalrundung, nicht eine ganze Einheit.

Vielen Dank im Voraus,

+1

Vielleicht wollten Sie ** strtod ** verwenden und ** double ** s verwenden –

Antwort

0

Sie werden zu einem 32-Bit-Gleitkomma-Umwandlung, die, dass viele Ziffern handhaben kann nicht die Genauigkeit müssen.

+0

Danke, ich weiß, dass mir etwas gefehlt hat. Mein Fehler. –