2011-05-11 12 views
6

Próbuję radzić sobie z wartościami JavaScript, takimi jak 23.45, ale chcę mieć możliwość wykonywania operacji matematycznych na tych wartościach (dodawanie, odejmowanie, mnożenie, dzielenie) bez uruchamiania zagadnień zmiennoprzecinkowych. Tak, czasami potrzebuję czasami podsumowywać wyniki, ale chciałbym, aby udzielili rozsądnych odpowiedzi.Czy są jakieś dobre waluty javascript lub klasy dziesiętne?

Rozważ to w javascript:

24.56 * .3 

Daje

7.36799999999 

Chciałbym to wyjdzie z 7.368.

Większość języków ma do czynienia z danymi w formacie dziesiętnym lub walutowym. Czy ktokolwiek zbudował klasę, która może skutecznie obsłużyć tego rodzaju dane, czy istnieje jakieś inne rozwiązanie do radzenia sobie z takimi rodzajami liczb bez konieczności ciągłego dostosowywania się do błędów zmiennoprzecinkowych?

Odpowiedz

2

Zamiast liczb całkowitych (które mają swoje własne problemy)

chciałbym użyć biblioteki bignumber.js

+1

Nice. Tego właśnie szukałem. Wygląda na to, że nie istniało, gdy pierwotnie zadałem pytanie, ale teraz jest. –

2

Jest Math

Obiekt Math jest budować w spec JavaScript więc każda przeglądarka ma to natywnie.

Jeśli chodzi o typy danych, JavaScript ma Number. to jest to! Nie mamy innego typu danych liczbowych. Najlepszym rozwiązaniem jest próba pracy z liczbami całkowitymi.

11

Liczba całkowita.

Istnieje nie trzeba używać zmiennoprzecinkowej dla waluty. Użyj stałego punktu, w którym liczba miejsc po przecinku wynosi 0.

Liczysz w pensach (a może w dziesiątkach groszy).

+0

Jest to pomocne. Miałem jednak nadzieję, że ktoś już wykonał gruntową pracę nad stworzeniem jakiejś klasy/frameworka do radzenia sobie z taką pseudo-dziesiętną reprezentacją za pomocą liczb całkowitych. –

+1

@Jeff: Tak zrobili. Mieszkali tysiące lat temu i odkryli, jak pomnożyć przez 100. –

+0

Pytanie dotyczy javascript. JS nie mają liczb całkowitych, wszystko jest podwójne. http://stackoverflow.com/a/3605946/446536 – geon

1

ku4jQuery-kernel zawiera zarówno klasę pieniędzy, jak i narzędzie matematyczne, które zawiera operacje i zaokrąglenia, w tym zaokrąglenie, zaokrąglenie i zaokrąglenie. Są to ładne metody, ponieważ można przekazać wartość do zaokrąglenia do. Na przykład możesz zrobić $ .math.round (3.4567, -2) i zaokrąglić liczbę 3.4567 do najbliższego 10^-2. To samo dotyczy pieniędzy. $ .money (100.87) .divide (2) .roundUp(). toString() da "50,44 $". Możesz pójść dalej i dodać nominał pieniędzy jako drugi parametr, powiedz "B" dla Bitcoin, $ .money (100,87, "B"). Divide (2) .roundUp(). ToString(). Więcej informacji na temat tej biblioteki można znaleźć tutaj: ku4jQuery-kernel i więcej bibliotek, które mogą Ci się przydać tutaj kodmunki github. Te biblioteki są ściśle utrzymywane i wykorzystywane w wielu projektach produkcyjnych. Jeśli zdecydujesz się je wypróbować, mam nadzieję, że uznasz je za użyteczne! Szczęśliwy kodowanie: {)}

Powiązane problemy