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?
miałem tylko mój "!?!?!?! OMG dlaczego" chwila wczoraj :) – rubiii
Mam moje chwile OMG codziennie w JS na ten temat. – user1567291