JavaScript中的BigDecimal

前端之家收集整理的这篇文章主要介绍了JavaScript中的BigDecimal前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是 JavaScript的新手(我来自Java背景),我正在尝试用少量资金进行一些财务计算.

我原来的目的是:

<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>

这很好用,除了它总是向上舍入(Math.ceil). Math.floor也有同样的问题,而Math.round对浮点数也没有好处.

在Java中,我会完全避免使用浮点数,但是在JavaScript中似乎没有默认包含的可比性(OMG为什么!?!?!?!).

所以,我的SO-fu让我发了这篇文章https://stackoverflow.com/questions/744099/is-there-a-good-javascript-bigdecimal-library

问题是,提到的所有库都被破坏或用于不同的目的. jsfromhell.com/classes/bignumber库非常接近我需要的东西,但是我的舍入和精度都有奇怪的问题……无论我将Round Type设置为什么,它似乎都是自己决定的.因此,例如,精度为2的3.7107和圆形类型的ROUND_HALF_UP在应该为3.71时以某种方式变为3.72.

我还尝试了@JasonSmith BigDecimal库(来自Java的BigDecimal的机加工端口),但似乎是node.js,我没有选择运行.

我怎样才能使用vanilla JavaScript(并且可靠)来实现这一点,或者是否有一个现代的(上面提到的那些现在已经很久了)我可以使用的库,它被维护并且没有被破坏?

解决方法

我喜欢将accounting.js用于数字,金钱和货币格式.

主页 – https://openexchangerates.github.io/accounting.js/

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

猜你在找的JavaScript相关文章