我希望每件事都准确、精确地加起来,我不能让总数少一分钱。
var buy_amount = 132.32000000; //amount in bitcoin
var buy_amount_satoshi = buy_amount*100000000; //amount in satoshi
var sell_rate = 10.00000000; //USD rate
var spend_usd = buy_amount_satoshi*sell_rate; //total USD
var spend_display = spend_usd/100000000; //total USD user display
console.log(spend_usd.toFixed(8)); //132320000000.00000000
console.log(spend_display.toFixed(8)); //1323.20000000jsfiddle.net/XjLLS/
我做得对吗?我很感激你的帮助!
更新:--我现在正在使用bigdecimal.js库,并编写了以下代码片段:
var bigdecimal = require("bigdecimal");
var mode = bigdecimal.RoundingMode.HALF_EVEN(); //default: DOWN
var satoshi = new bigdecimal.BigDecimal("100000000");
var buy_amount = new bigdecimal.BigDecimal("132.32000000"); //amount in bicoin
var amount_minor = buy_amount.multiply(satoshi); //amount in satoshi
var sell_rate = new bigdecimal.BigDecimal("10.00000000"); //sell rate usd
var spend_minor = amount_minor.multiply(sell_rate);
var user_spend = spend_minor.divide(satoshi, 8, mode); //total usd user must spend
var user_display = user_spend.toString();
console.log(user_display);jsfiddle.net/wwpWA/
默认的舍入模式是向下的,但我将其设置为HALF_EVEN,也就是银行家的四舍五入(银行家的四舍五入在使用货币时很常见)
我希望所有四舍五入的错误现在都消失了!如果我错了,请纠正我!
发布于 2014-04-09 11:12:58
尝尝这个
var buy_amount = 132.32000000;
var buy_amount_satoshi = (parseFloat(buy_amount)*100000000).toFixed(8);
var sell_rate = 10.00000000;
var spend_satoshi = (parseFloat(buy_amount_satoshi)*parseFloat(sell_rate)).toFixed(8);
var spend_display = (parseFloat(spend_satoshi)/100000000).toFixed(8); https://stackoverflow.com/questions/22960627
复制相似问题