2016-07-19 15 views
7

Jak można przeczytać w całym Internecie using floats to represent currency is a very bad idea. Zalecaną najlepszą praktyką jest użycie liczb całkowitych reprezentujących centy. W ten sposób możesz bezpiecznie nie napotkać żadnych problemów z precyzją, szczególnie jeśli robisz jakieś obliczenia.Używanie filtru waluty angulars z liczbą centów

Ponieważ jestem naiwny i zbyt optymistyczny, wybrałem - pomimo wszystkich ostrzeżeń - spływy do reprezentowania walut w mojej aplikacji. Na początku całkiem nieźle. Teraz napotykam na różne problemy (szczególnie z porównaniem) i chcę przełączać się z liczb zmiennoprzecinkowych na liczby całkowite.

Niestety kątowe nie obsługuje liczb całkowitych jako wartości wejściowej dla filtra waluty (przynajmniej z tego co wiem). Jestem trochę zaskoczony, że wygląda na to, że nikt nie wymyślił tego do tej pory (brak odpowiadających problemów na Githubie, nic na SO itd.).

Czy są jakieś sprawdzone metody? Można myśleć o jakichkolwiek downsides prosty filtr jak to może mieć:

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

Jakie wejście/wyjście oczekujecie? – developer033

+0

Wejście prądowe: '(float) 5,97' Wyjście:' 5,97 € '. Wymagane wejście: '(int) 597' Wynik poszukiwany:' 5,97 € ' –

Odpowiedz

2

Minusem będzie prawdopodobnie z tego samego powodu kątowa nie obsługuje rzucając wokół centów w pierwszej kolejności: not all currencies use 100 as their base (Skanowanie w dół „numer do podstawowa "kolumna tego stołu.)

+0

Wow, to bardzo interesujący fakt, którego nie znałem! Dziękuję Ci. Ale moim zdaniem to zdecydowanie żaden argument przeciwko "rzucaniu centów". Wskazany problem można łatwo rozwiązać, wprowadzając opcjonalną zmienną (z domyślnym zestawem dla wszystkich walut opartych na 100). Myślę, że to naprawdę nie jest do debaty, czy korzystanie z pływaków dla waluty jest dobrym czy złym pomysłem. A zalety używania centów zdecydowanie budzą wady jednej kolejnej zmiennej. –

+0

Z ciekawości: Czy masz link do faktycznej dyskusji na ten temat? Niestety nie znalazłem nic o tym, dlaczego kątowe nie obsługuje liczb całkowitych. –

+0

Nie, bez linku. Pamiętaj jednak, że filtr walut nie akceptuje symbolu waluty ani żadnych innych wskazówek dotyczących lokalizacji, więc nie wie, jaką walutą jest twoja wartość liczbowa, a zatem nie może jej znormalizować. Prawdopodobnie warto wskazać standardową opcję 'Intl.NumberFormat' dostępną teraz:' nowy Intl.NumberFormat (navigator.language, {style: 'currency', currency: 'EUR'}) .format (1234.56) ' – searlea