golos-lib-js
Version:
Golos-js the JavaScript library with API for GOLOS blockchain
44 lines (41 loc) • 1.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.fromImpliedDecimal = fromImpliedDecimal;
exports.toImpliedDecimal = toImpliedDecimal;
var _assert = _interopRequireDefault(require("assert"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/**
Convert 12.34 with a precision of 3 into 12340
@arg {number|string} number - Use strings for large numbers. This may contain one decimal but no sign
@arg {number} precision - number of implied decimal places (usually causes right zero padding)
@return {string} -
*/
function toImpliedDecimal(number, precision) {
if (typeof number === "number") {
(0, _assert.default)(number <= 9007199254740991, "overflow");
number = "" + number;
} else if (number.toString) number = number.toString();
(0, _assert.default)(typeof number === "string", "number should be an actual number or string: " + typeof number);
number = number.trim();
(0, _assert.default)(/^[0-9]*\.?[0-9]*$/.test(number), "Invalid decimal number " + number);
let [whole = "", decimal = ""] = number.split(".");
let padding = precision - decimal.length;
(0, _assert.default)(padding >= 0, "Too many decimal digits in " + number + " to create an implied decimal of " + precision);
for (let i = 0; i < padding; i++) decimal += "0";
while (whole.charAt(0) === "0") whole = whole.substring(1);
return whole + decimal;
}
function fromImpliedDecimal(number, precision) {
if (typeof number === "number") {
(0, _assert.default)(number <= 9007199254740991, "overflow");
number = "" + number;
} else if (number.toString) number = number.toString();
while (number.length < precision + 1)
// 0.123
number = "0" + number;
// 44000 => 44.000
let dec_string = number.substring(number.length - precision);
return number.substring(0, number.length - precision) + (dec_string ? "." + dec_string : "");
}