Floats, also Fließkommazahlen, in eine DB zu schreiben sollte man können. Dachte ich bis vor kurzem 😉
Und deshalb, vor allem als Hinweis an mich selbst: Falls ein Query mit einem – vorher bereits vom Punkt befreiter, das Komma in Punkt umgewandelten – String plötzlich nicht mehr korrekt ausgeführt wird, dann liegt das höchstwahrscheinlich an zwei Sachen; allein, eine war mir dann neu:
- Du übergibst deinem Query die Parameter via sprintf (oder äquivalenten davon) und (jetzt kommt das neue)
- dein Server spricht plötzlich Deutsch!
Um einen fehlerhaften Query aber dauerhaft zu vermeiden, setze ich vor meinen Query nun die Sprache des Systems auf die Sprache der Datenbank und dannach wieder zurück. Den Quellcode habe ich stark vereinfacht mal hier angefügt.
// Wechsel zur internen Sprache der DB, als Beispiel fest im Code
$old = setlocale(LC_NUMERIC, NULL);
setlocale(LC_NUMERIC, 'us_US');
// Query ausführen. Werte im Query werden via sprintf eingegeben
// ...
// Zurück zur normalen Einstellung
setlocale(LC_NUMERIC, $old);
Ich hoffe, ich kann damit mal jemanden aus der Patsche helfen, wahrscheinlich bin ich aber wieder mal selbst mein bester Kunde 😉
Irgendwie verstehe ich das Problem grade nicht.
setlocale(LC_ALL, ‚de_DE‘);
echo sprintf(„Ein Float: %.2F“, „12345.678“);
?>
=> Ein Float: 12345.68
@Oliver: So hatte ich es ursprünglich auch und es hat auch lange funktioniert. Bis vor kurzem. Lange Suche, kurze Ursache: Die Zahl wurde mit , statt . als Dezimal-Separator übertragen; der Workaround dazu ist im Beitrag beschrieben.
Der Unterschied zwischen %.2f und %.2F ist Dir aber schon klar?
setlocale(LC_ALL, ‚de_DE‘);
printf(„%.2F ist nicht %.2f“, „12345.67“, „12345.67“);
?>
@Oliver: Nice try, papiertüte; aber im Code wurde nichts geändert … ich suche noch nach der Ursache.
Herr Papiertüte bitte 🙂
Mit großem F sollte es da normalerweise keine Probleme geben.