String zu float wird falsch gerundet?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: String zu float wird falsch gerundet?

BeitragDo, Sep 29, 2011 8:55
Antworten mit Zitat
Benutzer-Profile anzeigen
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()
fld.Set(obj, SearchInFile("TempWeapon" + index, fld.Name(), "Weapons.ini"))
DebugLog(fld.Name() + ": " + String(fld.Get(obj)))
Next

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.

Xeres

Moderator

BeitragDo, Sep 29, 2011 10:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

M0rgenstern

BeitragDo, Sep 29, 2011 12:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Sep 29, 2011 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Dezimalstellen können auf 2er Basis halt nicht verlustfrei dargestellt werden, also hat man solche abweichungen auf der 10ten Nachkommastelle.

tedy

BeitragSa, Okt 08, 2011 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group