javascript bigdecimal避免货币舍入偏差

javascript bigdecimal避免货币舍入偏差,javascript,currency,rounding,bigdecimal,bitcoin,Javascript,Currency,Rounding,Bigdecimal,Bitcoin,用户提交购买请求:0.0104 BTC,费率为345.92欧元 配置: 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);

用户提交购买请求:0.0104 BTC,费率为345.92欧元

配置:

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);
var eur_b = eur_s.divide(satoshi, 8, mode);
console.log(eur_b.longValue());

output: 3.597568
btc*费率=支出:

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

output: 359756800
欧元/最小单位:

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

output: 3.597568
但由于欧元只有两位小数:

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

output: 3.6
我假设用户必须以345.92欧元的费率为0.0104 BTC花费3.6欧元

这里有一把小提琴:jsfiddle.net/nvkja98c/


如果我错了,请纠正我

你的问题是什么?计算正确吗?我会用这个代码避免舍入错误吗?我会用上面的代码避免舍入错误吗?