我是
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用于数字,金钱和货币格式.