floatstr: Wie agiert es? (Punktgenauen Wert erhalten)

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Moin,


    ich muss grad mit Entsetzen feststellen, dass Kalcor 'n Waschlappen ist und die floatstr-Funktion mein Resultat verfälscht, dem ich unbedingt entgegenwirken muss, da ich ein auf 2 Nachkommastellen genaues Ergebnis brauche.


    Folgendes Szenario:
    tmp beinhaltet einen Dezimalzahlenstring, im Beispiel: "0.01"
    floatstr(tmp) gibt mir aber 0.009999 wieder. Hier ist das Problem natürlich noch simpel, ich rechne einfach wieder +0.000001 drauf und lande bei 0.01.
    Doch wie ist das jetzt, wenn der String z.b. 0.25 enthält, oder 1.27.. Ist das Resultat bei floatstring immer um genau 0.000001 verfälscht, so dass ich obligatorisch dazuaddieren kann, oder kommt das auf die Ausgangsdezimalzahl im String an?


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Das Thema wurde schon vor Jahren im englischen Forum behandelt.
    Ich hatte das Problem zum ersten Mal bei einem Geldsystem.
    Genauso wie du dachte ich, dass ich logischer Weise einfach nur den fehlenden Wert dazuaddieren muss, doch siehe:


    Vorheriges Problem:


    5.55 wird zu 5.549999


    Problem mit Addition:


    5.55 wird zu 5.550001


    Ich fühlte mich wahnsinnig getrollt.
    Seitdem ist mein Geldsystem nur auf zwei Cent genau. Das heißt entweder er bekommt mal einen Cent zu viel, oder mal einen zu wenig.

  • Ich habe dieses Problem auch schon entdeckt und finde es nervig.
    Wenn du nur 2 Nachkommastellen brauchst, kannst du den Float-Wert vor dem Speichern in einen String auf 2 Stellen runden. Dann sollte sich das Problem erübrigen.

    Professioneller Webentwickler.