String zu float wird falsch gerundet?
Übersicht

![]() |
M0rgensternBetreff: String zu float wird falsch gerundet? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute,
Ich habe grade ein Problem, das ich mir nicht wirklich erklären kann: Ich habe eine Klasse, die aus einer INI-File Werte ausliest. Leider passiert an einer Stelle folgendes: Der Float Wert der gelesen wird, wir total dämlich gerundet. Aber nur bei einem einzigen Feld. Die INI Datei sieht dort so aus: Zitat: _fBulletSpeed=3.5
_fStrength=5.7 Die Ausgabe zu diesen beiden Zeilen sieht aber so aus: Zitat: DebugLog:_fBulletSpeed: 3.50000000
DebugLog:_fStrength: 5.69999981 Der Code mit dem das ganze ausgelsen wird sieht folgendermaßen aus: BlitzMax: [AUSKLAPPEN] For Local fld:TField = EachIn id.EnumFields() Das ganze funktioniert also über Reflections. Wie man sieht: fBulletSpeed wird richtig übernommen, fStrength aber nicht. Wenn ich alle Werte "manuell" also nicht über Reflections, sondern jeden Wert einzeln auslese, dann rundet er richtig. Kann das an den Reflections liegen? Und wenn ja, warum ist das so? Lg, M0rgenstern Edit: Ich sehe gerade, wenn irgendwas mit .5 da steht, dann wirds richtig gerundet. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist ganz normales Verhalten von Kommazahlen. Falls das Probleme verursacht, wäre der übliche Weg, Integer zu benutzen und nur an den benötigten Stellen zu teilen z.B. 570/100.0. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, ich muss mich korrigieren: Es scheint allgemein beim umwandeln zu passieren.
Aber auch nicht immer. Irgendwie nur bei *.3 *.4 *.6 *.7 und *.8 Ich habs auch schon mit double versucht... gleiches Ergebnis. Ist nicht weiter schlimm, aber ich finds nur irritierend. Danke Xeres, ich habs gemerkt. Lg, M0rgenstern |
||
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dezimalstellen können auf 2er Basis halt nicht verlustfrei dargestellt werden, also hat man solche abweichungen auf der 10ten Nachkommastelle. | ||
![]() |
tedy |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde eventuell einfach vorschlagen die Zahl mit 10 multiplizieren und dann schließend abzurunden.
Vielleicht hilft das ja |
||
01010100 01100101 01000100 01111001 00100000 00111010 01000100 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group