2016-07-19 12 views
7

Wie Sie über das Internet using floats to represent currency is a very bad idea lesen können. Die empfohlene bewährte Methode besteht darin, Ganzzahlen zu verwenden, die stattdessen Cents darstellen. Auf diese Weise können Sie sicher keine Präzisionsprobleme bekommen, besonders wenn Sie einige Berechnungen durchführen.Verwenden Sie Angulars Währungsfilter mit einer ganzen Zahl von Cent

Da ich naiv und viel zu optimistisch bin, entschied ich mich trotz aller Warnung, die Währungen in meiner App darzustellen. Es ging zunächst ganz gut. Jetzt stoße ich auf alle Arten von Problemen (besonders mit Vergleich) und möchte von Floats zu Integers wechseln.

Leider Winkel unterstützt nicht Cent Ganzzahlen als Eingabe für die Währungsfilter (zumindest soweit ich weiß). Ich bin ein bisschen erstaunt, dass es so aussieht, als wäre noch niemand dazu gekommen (keine entsprechenden Ausgaben auf GitHub, nichts auf SO etc.).

Gibt es Best Practices? Könnten Sie irgendwelche Nachteile könnte ein einfacher Filter denken wie dieses:

angular 
    .module('myApp') 
    .filter('cents', ['$filter', function($filter) { 
     return function(cents, symbol, fractionSize) { 
      var asFloat = cents/100; 
      return $filter('currency')(asFloat, symbol, fractionSize); 
     }; 
    }]); 
+0

Was ist die Eingabe/Ausgabe, die Sie erwarten? – developer033

+0

Stromeingang: '(float) 5.97' Ausgang:' 5,97 € '. Gesuchter Eingang: '(int) 597' Gesuchter Ausgang:' 5,97 € ' –

Antwort

2

Der Nachteil wahrscheinlich aus dem gleichen Grund wäre Angular nicht Cent um in erster Linie werfen kann leider: not all currencies use 100 as their base (Scannen Sie die ‚Nummer zu Basis 'Spalte dieser Tabelle.)

+0

Wow, das ist eine sehr interessante Tatsache, die mir nicht bewusst war! Vielen Dank. Aber meiner Meinung nach ist das kein Argument gegen "Cent werfen". Das Problem, auf das Sie hingewiesen haben, könnte leicht gelöst werden, indem eine optionale Variable eingeführt wird (mit der Standardeinstellung für alle 100 Währungen). Ich denke, es steht wirklich nicht zur Debatte, ob die Verwendung von Floats für Währungen eine gute oder eine schlechte Idee ist. Und die Vorteile der Verwendung von Cent empören die Nachteile einer weiteren Variablen bei weitem. –

+0

Aus Neugier: Haben Sie einen Link zu einer aktuellen Diskussion über dieses Thema? Leider habe ich nichts darüber gefunden, warum eckige Cent Zahlen nicht unterstützt. –

+0

Nein, keine Verbindung. Beachten Sie jedoch, dass der Währungsfilter kein Währungssymbol oder andere Gebietsschemas annimmt. Daher weiß er nicht, welche Währung Ihr numerischer Wert darstellt, und kann daher nicht normalisieren. Ich denke, es wahrscheinlich wert ist jetzt verfügbar, um den Standard 'Intl.NumberFormat' Option Hinweis auf:' neuen Intl.NumberFormat (navigator.language, {style: 'Währung', Währung: 'EUR'}). Format (1234.56) ' – searlea

Verwandte Themen