Yii::app()->NumberFormatter->formatDecimal()

Gibt es einen alternativen Aufruf?


echo Yii::app()->NumberFormatter->formatDecimal( "123456789", "USD");

Meintest du so?


echo Yii::app()->NumberFormatter->formatCurrency( "123456789", "USD");

formatDecimal() erwartet ja nur einen Parameter. Oder was genau willst du erreichen?

sorry, habe mich undeutlich ausgedrückt.

Es geht um diesen Teil, ob man das irgendwie verkürzen kann. "Yii::app()->NumberFormatter->"




$nf = Yii::app()->NumberFormatter;

...

echo $nf->formatCurrency( "123456789", "USD");

? :)???:blink:

thx!!!!


echo Yii::app()->NumberFormatter->format("#,##0.00", "123456789", "EUR");

(falsch) führt zu


123,456,789.00

und nicht zu (richtig)


123.456.789,00

Laut http://www.yiiframework.com/doc/api/CNumberFormatter#format-detail habe ich alles richtig gemacht

Hi,

der CNumberFormatter wird von deinen locale-Einstellungen beeinflusst!

Füge mal folgendes zu deiner Konfiguration in der main.php hinzu:


'language'=>'de',

Jetzt sollte alles wie erwartet aussehen :wink:

hehe,

jetzt klappt es!!! Aber es muss doch auch irgendwie mit dem "currency" - Parameter funktionieren

Japp, aber dazu musst du den Währungsplatzhalter in dein Pattern aufnehmen:


echo Yii::app()->NumberFormatter->format("#,##0.00¤", "123456789", "EUR");

ergibt: 123.456.789,00€

¤ <- das komische Ding ist der Währungsplatzhalter (siehe Docu)


echo Yii::app()->NumberFormatter->format("#,##0.00 €", "123456789", "EUR");

Habe das soweit gemacht jedoch funktioniert, dass nur wenn ich ‘language’ => ‘de’ in der config eintrage. Aber ist auch egal, hauptsache es funktioniert.

Kannst du mir vielleicht bei meinem "MANY-MANY-MANY" Problem weiterhelfen?

http://www.yiiframework.com/forum/index.php?/topic/4772-many-many-many-beziehung/

Hallo, danke für die hilfreichen Kommentare

Noch zum Tema wie das ganze verkürzt werden kann:

In meiner index.php hab ich die Zeile:

include "protected/components/shortcut.php"; ganz oben

In dieser datei stehen alle meine Hilfsfunktionen die ich global benutze… dort kann dann für das Zahlenformatieren z.B. folgendes rein:




function formatCurrency($number, $cur='EUR')

{

    return Yii::app()->NumberFormatter->format("#,##0.00¤", $number, $cur);

}

Jetzt lässt sich jeder Preis in dem programm ganz kurz mit:

formatCurrency(123.56) formatieren

Ein weiterer Vorteil ist, dass mit zukünftigen, geänderten, Anforderungen der Code nur in diesem Punkt geändert werden braucht (z.B. kann man eine Switchanweisung einbauen. die je nach language die Zahl anders formatiert)

Noch ein kleiner Tip: Wenn eine dieser Helper-Funktionen oft aufgerufen wird, sollte sie so "sparsam" wie möglich geschrieben sein. In deinem Fall führt z.B. jeder Aufruf von formatCurrency() zu 3 weiteren Funktionsaufrufen:

Yii::app(), getNumberFormatter() und dann eben format(). Stattdessen könnte man den formatter auch in einer statischen Variable vorhalten, damit bleibt ab dem 2. Aufruf nur noch 1 Funktionsaufruf übrig:




static $formatter=null;

if ($formatter===null)

    $formatter=Yii::app()->numberFormatter;

return $formatter->format(...)



Hallo,

Das ist eine gute Idee denke ich, aber wie bzw. an welcher Stelle muss das eingebaut werden ?




static $formatter=null;

if ($formatter===null)

    $formatter=Yii::app()->numberFormatter;

return $formatter->format(...)



Na in deiner Hilfsfunktion. Ersetz einfach deine einzelne Zeile mit dem obigem Beispiel.