2016-07-19 422 views
7

Come potete leggere su Internet using floats to represent currency is a very bad idea. La migliore pratica consigliata è quella di utilizzare numeri interi che rappresentano invece i centesimi. In questo modo sei sicuro di non incorrere in problemi di precisione, soprattutto se stai facendo alcuni calcoli.Utilizzo del filtro di valuta degli angoli con un numero intero di centesimi

Dato che sono ingenuo e troppo ottimista, ho scelto, nonostante tutti gli avvisi, di rappresentare le valute nella mia app. All'inizio andò abbastanza bene. Ora sto incontrando tutti i tipi di problemi (specialmente con il confronto) e voglio passare da float a interi.

Purtroppo angolare non supporta cent interi come input per il filtro di valuta (almeno per quanto ne so). Sono un po 'stupito che sembra che nessuno sia arrivato fino ad ora (nessun problema corrispondente su github, niente su SO, ecc.).

Esistono buone pratiche? Potresti pensare di eventuali aspetti negativi di un filtro semplice come questo potrebbe avere:

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

Qual è l'input/output che ti aspetti? – developer033

+0

Ingresso corrente: '(float) 5.97' Output:' 5,97 € '. Input desiderato: '(int) 597' Output desiderato:' 5,97 € ' –

risposta

2

Il rovescio della medaglia sarebbe probabilmente lo stesso motivo angolare non supporta gettando centesimi in tutto, in primo luogo: not all currencies use 100 as their base (scansione lungo il 'numero di base 'di quella tabella.)

+0

Wow, questo è un fatto molto interessante di cui non ero a conoscenza! Grazie. Ma a mio parere questo non ha assolutamente niente contro "buttare centesimi in giro". Il problema che hai indicato potrebbe essere facilmente risolto introducendo una variabile opzionale (con il set predefinito per tutte le 100 valute basate). Penso che non sia davvero dibattuto se utilizzare i galleggianti per la valuta sia una buona o una cattiva idea. E i vantaggi dell'uso di cents oltraggiano di gran lunga gli svantaggi di un'ulteriore variabile. –

+0

Per curiosità: hai un link per una discussione vera su questo argomento? Sfortunatamente non ho trovato nulla sul perché l'angolare non supporti i cent interi. –

+0

No, nessun collegamento. Tuttavia, tieni presente che il filtro di valuta non accetta un simbolo di valuta o altri suggerimenti di localizzazione, quindi non sa quale valuta il tuo valore numerico rappresenta e quindi non può normalizzarlo. Immagino che valga la pena sottolineare l'opzione standard "Intl.NumberFormat' disponibile ora:' new Intl.NumberFormat (navigator.language, {style: 'currency', currency: 'EUR'}). Format (1234.56) ' – searlea