2013-05-24 25 views
6

Jestem bardzo nowy w JavaScript (pochodzę z tła Java) i próbuję wykonać pewne obliczenia finansowe przy niewielkich kwotach.BigDecimal w JavaScript

Mój oryginalny przejdź na to było:

<script type="text/javascript"> 
    var normBase = ("[price]").replace("$", ""); 
    var salesBase = ("[saleprice]").replace("$", ""); 
    var base; 
    if (salesBase != 0) { 
     base = salesBase; 
    } else { 
     base = normBase; 
    } 
    var per5 = (base - (base * 0.05)); 
    var per7 = (base - (base * 0.07)); 
    var per10 = (base - (base * 0.10)); 
    var per15 = (base - (base * 0.15)); 
    document.write 
     (
     '5% Off: $' + (Math.ceil(per5 * 100)/100).toFixed(2) + '<br/>' + 
     '7% Off: $' + (Math.ceil(per7 * 100)/100).toFixed(2) + '<br/>' + 
     '10% Off: $' + (Math.ceil(per10 * 100)/100).toFixed(2) + '<br/>' + 
     '15% Off: $' + (Math.ceil(per15 * 100)/100).toFixed(2) + '<br/>' 
    ); 
</script> 

To działa dobrze z wyjątkiem, że zawsze zaokrągla się w górę (Math.ceil). Math.floor ma ten sam problem, a Math.round nie nadaje się również do pływania.

W Javie, uniknąłbym użycia pływaków całkowicie od samego początku, jednak w JavaScript nie ma domyślnego włączenia czegoś porównywalnego (OMG DLACZEGO!?!?!?!).

Więc moje SO-fu doprowadziła mnie do tego postu: https://stackoverflow.com/questions/744099/is-there-a-good-javascript-bigdecimal-library

Problem polega na tym, wszystkie biblioteki wymienione są albo uszkodzony lub w innym celu. Biblioteka jsfromhell.com/classes/bignumber jest bardzo zbliżona do tego, czego potrzebuję, ale mam dziwne problemy z jej zaokrąglaniem i precyzją ... Bez względu na to, do czego ustawiam typ okrągły, wydaje się, że sama się decyduje. Na przykład 3,7107 z precyzją 2 i okrągłym typem ROUND_HALF_UP jakoś kończy się jako 3,72, kiedy powinno być 3,71.

Próbowałem również biblioteki @JasonSmith BigDecimal (obrabiany port z BigDecimal Java), ale wydaje się, że jest on dla node.js, którego nie mam możliwości uruchamiania.

Jak mogę to zrobić za pomocą wanilii JavaScript (i być godnym zaufania) lub czy istnieje współczesna (te wymienione powyżej są całe lata) biblioteka, z której mogę korzystać, a która nie jest zepsuta?

+1

miałem tylko mój "!?!?!?! OMG dlaczego" chwila wczoraj :) – rubiii

+0

Mam moje chwile OMG codziennie w JS na ten temat. – user1567291

Odpowiedz

4

Lubię używać formatu accounting.js do formatowania liczb, pieniędzy i walut.

strona - https://openexchangerates.github.io/accounting.js/

Github - https://github.com/openexchangerates/accounting.js

+0

+1 To wygląda obiecująco! Dziękuję, spróbuję. – SnakeDoc

+1

Powodzenia! Nie powinieneś być rozczarowany. –

+0

Pracował jak urok i dokładnie zgodnie z oczekiwaniami! Jeszcze raz dziękuję. (Teraz, aby uzyskać JavaScript, aby włączyć coś takiego domyślnie!) – SnakeDoc