javascript bigdecimal避免货币舍入偏见

时间:2014-10-27 14:34:18

标签: javascript currency rounding bigdecimal bitcoin

用户提交购买请求:0.0104 BTC,汇率为345.92 EUR

配置:

var mode = RoundingMode.HALF_EVEN();
var satoshi = new BigDecimal("100000000");

用户输入:

var btc_b = new BigDecimal("0.0104");
var rate_b = new BigDecimal("345.92");

将金额转换为最小单位:

var btc_s = btc_b.multiply(satoshi);

btc * rate =花费:

var eur_s = btc_s.multiply(rate_b).setScale(0,mode);
console.log(eur_s.longValue());

output: 359756800

欧元/最小单位:

var eur_b = eur_s.divide(satoshi, 8, mode);
console.log(eur_b.longValue());

output: 3.597568

但由于eur只有2位小数:

console.log(eur_b.setScale(2,mode).longValue());

output: 3.6

我假设用户必须花费3.6欧元购买0.0104比特币,价格为345.92欧元

这是一个小提琴:jsfiddle.net/nvkja98c /

如果我错了,请纠正我!

0 个答案:

没有答案