2015-04-13 13 views
5

Z tego, co przeczytałem, liczby w JavaScript są w rzeczywistości przechowywane jako zmiennoprzecinkowe i nie ma rzeczywistego typu całkowitoliczbowego. Czy to jest dokładne?Jak mogę obsługiwać waluty w JavaScript?

Jeśli nie ma typ całkowitą, to w jaki sposób mogę dokładnie zapisać waluty? Jako ciąg lub coś takiego?

+1

Zobacz również http://stackoverflow.com/questions/1458633/how-to-deal-with-floating-point-number-precision-in-javascript – Aerovistae

+0

„jak mogę dokładnie przechowywania waluty ? " JavaScript i prawdziwe pieniądze nie idą dobrze razem, powiedziałbym, głównie z perspektywy bezpieczeństwa. – Jonathan

+1

http://stackoverflow.com/q/3730019/438992 –

Odpowiedz

9

[...] i nie ma prawdziwy typ całkowitą. Czy to jest dokładne?

Tak.

Jeśli nie ma typu całkowitoliczbowego, to w jaki sposób mogę dokładnie przechowywać waluty?

Można nadal używać wartości, które uważamy za całkowitymi, tj 5, 42 itd Wartości te są dokładne. Wartości "Integer" tylko tracą precyzję, jeśli są> 2^53.

Czego należy unikać, w dowolnym języku, używa wymiernych liczb do reprezentowania waluty, jeśli wykonasz z nim jakiekolwiek obliczenia. Znaczenie, zamiast 4.13, należy użyć 413.

Zobacz Why not use Double or Float to represent currency?

+1

Dziękujemy! To bardzo pomaga mi i ma więcej sensu! Więc mówisz, że gdybym chciał przechowywać 9,99 USD, to najlepiej zrobiłem to, by zapisać 999 i podzielić przez 100 po odzyskaniu? – timbram

+1

Tak! Przechowuj wartości pieniężne w najmniejszej jednostce (np. Grosze). –

+0

Powinieneś zapisać go jako 999, manipulować nim jako 999 i zmienić go na 9,99 tylko wtedy, gdy go wyświetlisz. –

0

Dobrze, jeśli jest to tylko waluty, liczb zmiennoprzecinkowych powinno być dobrze. Możesz unosić/ciąć/zaokrąglić zmiennoprzecinkowe do liczby całkowitej, jeśli naprawdę potrzebujesz.

+1

Rozsądność tej odpowiedzi zależy * całkowicie * od tego, co faktycznie dzieje się z walutą w JS. –

-1

Aby wyświetlacz jako waluty, toFixed to świetny sposób:

var someMoney = 123.1; 
var formattedCurrency = someMoney.toFixed(2); //this is now the string "123.10" 
console.log('$' + formattedCurrency); 
+0

@DougCoburn Być może źle Cię zrozumiałem, ale kod, który podałeś, powinien bezwzględnie wynosić 1,25 i 1,00. Myślę, że powinieneś sprawdzić swoją matematykę ponownie, inaczej chciałbym docenić inne wyjaśnienie problemu tutaj. OP pyta o sposób przechowywania walut, dokładnie to robi mój kod. –

Powiązane problemy