PHP intval für Dezimalzahlen?

Seiyaru2208

Captain
Registriert
Apr. 2008
Beiträge
3.111
Hallo Jungs,

ich bin relativ neu in der PHO Materie und ich versuche grade meine webweite zu schreiben.

Das Thema Sicherheit liegt mir natürlich am herzen daher versuche ich Übergaben von Zahlen durch intval und Buchstaben wie den Content via einer eignen Funktion m zu sichern.

Jetzt habe ich allerdings ein kleines Problem, eine Tabelle von mir hat Dezimalzahlen und diese werden wenn ich sie in mein Backend ändern möchte falsch gespeichert.

Bsp: Ich gebe 55.99 ein wird der Eintrag so gespeichert 55.00.

Da die Tabelle richtig formatiert ist DEZIMAL(5,2) kann es ja nur an der Übergabe liegen..... Oder habe ich irgendwo ein Denkfehler? :Freak

PS: Ich habe mal dr.Google gefragt und dort wurde mal erwähnt das man bei Dezimalzahlen Floatval einsetzten soll, jedoch kommt bei mir da das gleiche Ergebnis rum wie bei intval....
 
Poste mal einen Codeschnipsel, der zeigt wie der Wert aus dem HTTP-Request geholt wird und wie du ihn ins SQL-Statement gibst.
 
Ich bin ein Depp.... Ich habe es selber gefunden ^^ doubleval heißt das Zauberwort. Entschuldigt bitte ^^
Ergänzung ()

Hätte ich die Zeit für den Post in Googel investiert hätte ich deine Zeit nicht verschwenden müssen. Mit doubleval funktioniert es jetzt alles reibungslos!
 
aber nu haste dafür gesorgt, dass andere schneller an das passende stichwort kommen. also alles gut
 
Oder nutz gleich richtige Casts.
Code:
$abc = (int)'5';
$def = (double)'6.5';
 
Da verstehe ich jetzt allerdings nicht, wie dass das Problem gelöst haben soll. Meines Wissens nach ist doubleval in PHP doch nur ein Alias für floatval und tut damit intern exakt dasselbe?!

Mal ganz abgesehen davon: Selbst wenn in PHP, wie eigentlich ansonsten üblich, die float-Konvertierung eine 32bit Gleitkommazahl liefern würde und der double dementsprechend eine 64bit Gleitkommazahl: Sowas wie 55.99 ist mit beiden ohne Probleme darstellbar.
Selbst wenn die also doch unterschiedlich arbeiten, müsste beide für das dargestellte Problem funktionieren.

Meiner Meinung nach muss der Fehler woanders gelegen haben?!
 
Falls es sich um Dezimalzahlen mit bekannter Anzahl von Nachkommastellen handelt (z.B. Geldbeträge: 2 Nachkommastellen), sollte intern ein ganzzahliger Datentyp verwendet werden, um numerische Ungenauigkeiten zu verhindern.
 
Wart- und lesbaren Code hast du dann aber nicht wirklich. Dann doch lieber mit Integer arbeiten. Zur Vermeidung von Rundungsfehlern (welcher Depp hat sich Primzahlen als Steuer ausgedacht?) sei dazu noch empfohlen, mit ner Kommastelle mehr zu rechnen.
 
Zurück
Oben