Probleme mit Zahlenformat (Komma statt Punkt)

Hallo Gemeinde,

ich habe folgendes Problem seit IPS5:

Nach und nach migriere ich meine Projekte auf IPS5 und stellte fest, dass Berechnungen in PHP nun ausschliesslich im Komma-Format, also z.B. 0,1 statt 0.1 erfolgen. Einige Größenberechnungen von Websiteinhalten laufen so leider nicht, da z.B. Chrome Komma-angaben nicht versteht.

In IPS 4.4 hatte ich das noch nicht festgestellt

Test:

echo((45/33)*100);   // IPS 4.4: 136.36363636364

echo((45/33)*100);   // IPS 5.0: 136,36363636364

Gibt es dafür einen Spezialschalter oder INI-Eintrag ?

Gruß André

Das Thema hatten wir doch schon x-mal…
Echo nutzt die Einstellungen deiner local, da hier eine float zu String Konvertierung stattfindet.
Du kannst z.B. mit number_format ( PHP: number_format - Manual ) den String in dein gewünschtes Format überführen.
Michael

Danke. Aber es tritt ja bei jedweder Berechnung auf. Also auch wenn ich es gleich in eine Variable packe.

Problem ist ein iFrame mit um die einhundert Elementen die zu positionieren sind. Dann bleibt mir wohl nichts anderes übrig als Str_replace zu verwenden…

Gruß André

Wie kommst du zu dieser Annahme?
Prüf es mit var_dump.
Dann siehst du sowohl den Datentyp als auch den echten Wert.

Michael

Hallo Michael,

Problem ist eigentlich ein (Uralt-) Script für meine Rolladensteuerung, welches die Zustände visualisiert (Behanghöhe, was ist selektiert, etc.). Derzeit migriere ich auf IPS5 einzeln meine Projekte mit einer Art Exporter (nur ausgewählte Teile des Objektbaumes), um wieder ein sauberes, schlankes system zu haben.

Ich denke, dass ich das Problem eingekreist habe. Der aktuelle Zustand wird aus einer Variablen geholt, um ihn zur Visualisierung zu berechnen. Z.B. so:

$Level_Rolladen_Wohnzimmer_Sued_IST = GetValue(Level_Rolladen_Wohnzimmer_Sued_IST);
$Level_Rolladen_Wohnzimmer_Sued_left = (82/900)*100;
$Level_Rolladen_Wohnzimmer_Sued_top = (( 256 - ((256-222)*$Level_Rolladen_Wohnzimmer_Sued_IST)) / 500 )*100;
$Level_Rolladen_Wohnzimmer_Sued_width = (64/900)*100;
$Level_Rolladen_Wohnzimmer_Sued_height = (41/500)*100;

Dann werden die Werte in ein HTML übergeben.Z.B. so:

<div name="Shutters"/>
 <img src="images/005.png"
 alt="Wohnzimmer Sued"
 style="
 position: absolute;
 left: '.$Level_Rolladen_Wohnzimmer_Sued_left.'%;
 top: '.$Level_Rolladen_Wohnzimmer_Sued_top.'%;
 width: '.$Level_Rolladen_Wohnzimmer_Sued_width.'%;
 height: '.$Level_Rolladen_Wohnzimmer_Sued_height.'%;
 z-index:2"/>
</div>

Der Fehler gründet sich ergo auf der von IPS abgeholten Variable.

Vorher sah es so aus:

Jetzt so: (rechts sieht man, dass Kommata verwendet werden)

Ich werde es also umschreiben müssen.:mad:

Gruß André

… nochmal ich. Habe das Problem quick and dirty mit Str_replace gelöst:

$HTML_Floorplan_Layer = str_replace(",", ".", $HTML_Floorplan_Layer);

Jetzt sieht es aus, wie vorher.

Gruß André

Falsch.
Der Fehler kommt weil du einen Float mit einen String verketten willst.
PHP macht dann einen cast auf den Float.
Und der nutzt automatisch deine Lokalisierung.
Steht auch in der PHP Doku:
PHP: Strings - Manual
Das PHP das vorher nicht gemacht hat; kannst du schlecht IPS unterstellen.
Michael

… beruhige Dich. Nicht IPS unterstellt, sondern bei PHP7 festgestellt:

Nach und nach migriere ich meine Projekte auf IPS5 und stellte fest, dass Berechnungen in PHP nun ausschliesslich im Komma-Format, also z.B. 0,1 statt 0.1 erfolgen.

Wenn ich IPS doof finden würde, hätte ich nicht tausende Stunden daran gesessen :wink:

Gruß André

Brauche ich nicht, bin ja nicht aufgeregt :wink:
Finde es aber immer Schade das immer unterstellt wird das IPS Schuld sei.
Zumal es in der Migrationsanleitung von 3.4 auf 4.0 steht das es durch PHP 5.6 kommt.
Michael

… prima. Dann sind wir uns einig. Darauf ein Bierchen :rolleyes: