diff --git a/src/js/amount.js b/src/js/amount.js index afb652f46d..b50d4e39ac 100644 --- a/src/js/amount.js +++ b/src/js/amount.js @@ -478,8 +478,15 @@ Amount.prototype.to_human = function (opts) { opts = opts || {}; - var int_part = this._value.divide(consts.bi_xns_unit).toString(10); - var fraction_part = this._value.mod(consts.bi_xns_unit).toString(10); + // Default options + if ("undefined" === typeof opts.group_sep) opts.group_sep = true; + opts.group_width = opts.group_width || 3; + + var denominator = this._is_native ? + consts.bi_xns_unit : + consts.bi_10.clone().pow(-this._offset); + var int_part = this._value.divide(denominator).toString(10); + var fraction_part = this._value.mod(denominator).toString(10); int_part = int_part.replace(/^0*/, ''); fraction_part = fraction_part.replace(/0*$/, ''); @@ -488,6 +495,13 @@ Amount.prototype.to_human = function (opts) fraction_part = fraction_part.slice(0, opts.precision); } + if (opts.group_sep) { + if ("string" !== typeof opts.group_sep) { + opts.group_sep = ','; + } + int_part = utils.chunkString(int_part, opts.group_width, true).join(opts.group_sep); + } + var formatted = ''; formatted += int_part.length ? int_part : '0'; formatted += fraction_part.length ? '.'+fraction_part : ''; diff --git a/src/js/utils.js b/src/js/utils.js index 563969fee4..31d2a72d63 100644 --- a/src/js/utils.js +++ b/src/js/utils.js @@ -70,6 +70,19 @@ var stringToArray = function (s) { return a; }; +var chunkString = function (str, n, leftAlign) { + var ret = []; + var i=0, len=str.length; + if (leftAlign) { + i = str.length % n; + if (i) ret.push(str.slice(0, i)); + } + for(; i < len; i += n) { + ret.push(str.slice(i, n+i)); + } + return ret; +}; + var logObject = function (msg, obj) { console.log(msg, JSON.stringify(obj, undefined, 2)); }; @@ -81,5 +94,6 @@ exports.hexToString = hexToString; exports.stringToArray = stringToArray; exports.stringToHex = stringToHex; exports.logObject = logObject; +exports.chunkString = chunkString; // vim:sw=2:sts=2:ts=8:et