setlocale(): float wird mit Komma ausgegeben


suntrop

Erfahrenes Mitglied
#1
Weiß nicht genau, ob es eher ein PHP- oder HTML-Thema ist, aber ohne PHP hätte ich es nicht ;-)
PHP:
<?php var_dump($float); // float(7,5) ?>
<input type="number" value="<?= $float ?>">
Ich habe per setlocale() PHP "eingedeutscht", somit bekomme ich auch Zahlen nicht als 7.5 sondern 7,5 ausgegeben. Funktioniert auch überall gut – kann damit korrekt rechnen und in der Ausgabe brauche ich nichts umwandeln.
Aber, wenn ich jetzt ein HTML input type number mit einem Wert belegen will, dann bleibt das Feld leer. Im HTML Code steht nämlich
HTML:
<input type="number" value="7,5">
Die Ausgabe funktioniert aber nur, wenn man
HTML:
<input type="number" value="7.5">
schreibt.

Einzige Lösung wäre per str_replace() das Komma in ein Punkt auszuwechseln. Das macht aber Probleme wenn die Variable leer ist. Und wirkt irgendwie unschön.

Kennt jemand bessere Lösungen für das Problem?
 

suntrop

Erfahrenes Mitglied
#3
"Unbedingt" wäre übertrieben, aber es hat den netten Effekt, dass der User leichter den Inhalt mit den Pfeiltasten/den kleinen Button ändern kann und am Smartphone werden Zahlen automatisch "aktiviert". Es wäre also schön, wenn es eine Lösung mit dem number input gibt.
 

Sempervivum

Erfahrenes Mitglied
#4
Ich wollte schon schreiben: "Es gibt keine Locale für den Number-Input" aber das trifft nicht ganz zu:
https://stackoverflow.com/questions/13412204/localization-of-input-type-number
<input name="myinput" value="0.5" step="0.01" lang="de-DE" type="number">
Browserunterstützung habe ich nicht recherchiert. Nur die schlechte Nachricht: Das gilt nur für die Präsentation für den Benutzer, value und step müssen dennoch mit Punkt notiert werden.
Da bleibt wohl doch nur die Umwandlung mit str_replace, möglicher Weise in einer Funktion mit Berücksichtigung des Sonderfalls eine leeren Variablen.
 

suntrop

Erfahrenes Mitglied
#5
Danke dir. Der Inhalt wird dem User schon als Komma-Zahl angezeigt, blöde nur, dass das Input keine Komma-Zahl akzeptiert. Ich denke eine Funktion mit str_replace() ist die beste Option. Denn auch number_format() ist suboptimal (wegen Nachkommastellen) und NumberFormatter ist auch nicht das passende hier.
 

Neue Beiträge