我希望一切都準確,加起來,我不能讓總數成爲一分錢。JavaScript nodejs舍入錯誤
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.20000000
jsfiddle.net/XjLLS/
- 乘以量與億拿到沒有。 satoshis的 - Proper Money Handling
- 乘以量與速度
- 加入8位小數的結果
我是這樣做的權利?我感謝您的幫助!
UPDATE: 我現在使用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 aka銀行家的四捨五入(銀行家的四捨五入是常見的工作時用錢)
我希望所有的舍入錯誤現在都消失了!如果我錯了,請糾正我!
你可能想不是JavaScript等,然後東西。 –
通常情況下,計算是在次要單位(我猜這裏是美分?)完成,並在最後轉換爲主要單位(美元?)。你不會說你需要什麼精度水平。 – RobG
金額是比特幣,我乘以100000000獲得次要單位! (1btc = 100000000 satoshi),我需要8位小數 – user3510638