Floats mit Punkt oder Komma

Hallo paresy,
mit diesem Tesscript gebe ich eine Float-Variable aus:

<?
$test = 42.123;
IPS_LogMessage("TEST",$test);
?>

Ergebnis:
Korrekt laufendes System (Rasberry, vorletzte IPS-Version)
TEST | 42.122999999999998
Wenn ich dann per apt-get upgrade/update die IPS-Version aktualisiere und das Skript erneut starte:
TEST | 42,122999999999998 (also mit Komma)
Nach einem Reboot ist dann alles wieder gut:
TEST | 42.122999999999998

Dieses Verhalten habe ich schon seit längerer Zeit, ist also nicht von der letzten IPS-Versionen abhängig. Da ich manchmal ein Reboot nach IPS-Upgrade vergesse, tauchen dann immer wieder Probleme auf, wenn ich Strings mit Float erzeuge und dann z.B. an MySQL übergebe. Was könnte die Ursache dafür sein?

Danke und Gruß
Peter

Du müsstest mal im Logfile schauen, welche „Sprache“ erkannt wird. Normalerweise sollte immer das Komma bei unseren deutschen Systemen auftauchen. Sofern du aber für root, welches beim Start den Prozess startet nicht de_DE als Sprache eingestellt hast, erklärt dies, warum dein IP-Symcon mit dem Punkt statt Komma startet, weil es eben die englische Sprache eingestellt hat. Wenn du direkt startest, gehst du wahrscheinlich über sudo und somit startet IP-Symcon mit der Sprache vom pi User.

Probier nächste mal folgendes:


sudo su
apt-get update
apt-get upgrade

Das dürfte den selben Effekt haben als wenn du hinterher neu startest.

paresy

PS: Wenn du für SQL prepared statements nutzt, würde das Problem nicht auftreten, da das Binding sich um die korrekte Konvertierung kümmert. Du schießt dir hier mit dem expliziten Float nach String konvertieren ins Knie.

Ich habe nochmal probiert: Das Problem hat nichts mit dem IPS-Upgrade zu tun, sondern allein mit dem Restart des IPS-Services.
Nach einem Reboot taucht in den IPS-Logs folgendes auf:

06:40:47 | 00000 | MESSAGE | LocalePool | Detected locale:
06:40:47 | 00000 | MESSAGE | LocalePool | Invalid locale

Die Sprache wird also nicht erkannt. Wenn ich dann ein /etc/init.d/symcon restart mache:

18:07:51 | 00000 | MESSAGE | LocalePool | Detected locale: de_DE
18:07:51 | 00000 | MESSAGE | LocalePool | Using locale: de

In der Liste, die ich mit dem Aufruf „locale“ erhalte, steht alles auf „de_DE.UTF-8“, also auch

LANG=de_DE.UTF-8
LANGUAGE=de_DE.UTF-8

Dieses Setting sehe ich in allen Szenarien. Das bedeutet doch eigentlich, dass die Systemsprache auf DE steht.

Ich arbeite übrigens auf den kleinen Kisten immer unter root (ja, ja …:D).

Muss ich mir mal ansehen - das hatte ich bei meinem bisherigen „Gefrickel“ immer ausgeblendet.
Das Punkt/Komma-Problem taucht aber nicht nur in Verbindung mit MySQL auf, sondern auch hier, wo Floats in Strings gepackt werden und dann als CSS-Optionen dienen (Erzeugung von Farbskalen). Ich vermute, dass ich in diesem Fall dann eine kleine Routine brauche, die das Komma durch den Punkt ersetzt.

Viele Grüße
Peter