Ich bin sehr neu in JavaScript (ich komme aus einem Java-Hintergrund) und ich versuche, einige finanzielle Berechnungen mit kleinen Geldbeträgen zu machen.BigDecimal in JavaScript
Meine ursprüngliche gehen an war:
<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>
Das funktionierte gut, außer es immer aufzurunden (Math.ceil
). Math.floor
hat das gleiche Problem, und Math.round
ist auch nicht gut für Floats.
In Java hätte ich die Verwendung von Floats komplett von Anfang an vermieden, aber in JavaScript scheint es keine standardmäßige Aufnahme von etwas Vergleichbarem zu geben (OMG WARUM!?!?!?!).
Also, mein SO-fu hat mich zu diesem Beitrag führt: https://stackoverflow.com/questions/744099/is-there-a-good-javascript-bigdecimal-library
Das Problem ist, alle Bibliotheken entweder gebrochen oder für einen anderen Zweck erwähnt werden. Die jsfromhell.com/classes/bignumber
-Bibliothek ist sehr nah an dem, was ich brauche, aber ich habe bizarre Probleme mit ihrer Rundung und Präzision ... Egal, was ich den Round-Typ festlegen, scheint es allein zu entscheiden. So zum Beispiel 3.7107 mit der Genauigkeit von 2 und runden Typ von ROUND_HALF_UP
irgendwie wie 3.72 wenn es 3.71 sein sollte.
Ich versuchte auch @JasonSmith BigDecimal-Bibliothek (ein bearbeiteter Port von Java BigDecimal), aber es scheint für node.js zu sein, die ich nicht die Möglichkeit habe zu laufen.
Wie kann ich dies mit Vanilla JavaScript (und zuverlässig sein) oder gibt es eine moderne (die oben genannten sind alle Jahre alt) Bibliothek, die ich verwenden kann, die beibehalten wird und nicht kaputt ist?
Ich hatte gerade meine "!?!?!?! OMG WARUM" Moment gestern :) – rubiii
Ich habe meine OMG Momente jeden Tag in JS dazu. – user1567291