Beispielcode:
$fmt = new NumberFormatter('sv_SE', NumberFormatter::PERCENT);
var_dump($fmt->format(99.99));
Erwartete Ausgabe:
string(9) "99,99 %"
Tatsächliche Leistung:
string(9) "9 999 %"
Analyse:
Ich muss "etwas vermissen". Ich habe bereits die Prozentzahl (neunundneunzig Komma neunundneunzig) und möchte sie nur für die angegebene Sprache + Gebietsschema-Kombination entsprechend ausgeben. In den USA ist es zum Beispiel "99,99%" mit einem Punkt für das Dezimalzeichen und ohne Leerzeichen zwischen der Prozentzahl und dem Prozentzeichen, und in Schweden ist es "99,99%" mit einem Komma für das Dezimalzeichen und ein Zwischenraum. Es gibt wahrscheinlich zahlreiche andere Regeln in anderen Gebietsschemas / Sprachen, die mir nur noch nicht begegnet sind.
Ich möchte nicht, dass PHP die Nummer, die ich füttere, in irgendeiner Weise "weiterverarbeitet". Es ist schon getan". Keine weitere Verarbeitung erforderlich.
Ich verstehe ehrlich gesagt nicht einmal, warum PHP es in "9999" umwandelt, wenn es eindeutig als Float als 99,99 angegeben ist ...
Gibt es eine versteckte Option, um diese "Weiterverarbeitung" der Nummer auszuschalten?
NumberFormatter geht davon aus, dass die Zahl in Ihrem Fall zwischen 0 und 1 liegt 99,99/100 === 0,9999, daher können Sie es so verwenden:
$fmt = new NumberFormatter('sv_SE', NumberFormatter::PERCENT);
var_dump($fmt->format(99.99/100));
Nach dem Lesen der Dokumentation bezweifle ich stark, dass es einen anderen Weg gibt.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen