я хочу, чтобы все было точно и складывалось точно, и я не могу допустить, чтобы в сумме было меньше пенни.
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/
- умножьте сумму на 100000000, чтобы получить нет. сатоши - Правильное обращение с деньгами
- умножьте сумму на курс
- добавить к результату 8 знаков после запятой
я делаю это правильно? я ценю вашу помощь!
ОБНОВЛЕНИЕ: теперь я использую библиотеку 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/
режим округления по умолчанию - DOWN, но я установил его на HALF_EVEN, он же округление банкира (округление банкира распространено при работе с деньгами)
я надеюсь, что все ошибки округления теперь исчезли! пожалуйста, поправьте меня, если я ошибаюсь!