UNPKG

ferngully-aurelia-tools

Version:

Ferngully Tools for Aurelia

63 lines 2.47 kB
import * as numeral from "numeral"; export class NumberService { toString(value, format) { if (typeof (value) === 'string') { return value; } if (Number.isNaN(value)) { return null; } return numeral(value).format(format); } fromString(value, decimalPlaces = 1000) { if (!this.stringIsNumber(value, decimalPlaces)) { return value; } return numeral(value).value(); } stringIsNumber(value, decimalPlaces = 1000) { if (typeof value === "number") return true; if ((value === null) || (value === undefined)) return false; value = value.trim(); let regex = new RegExp(this.getNumberRegexString(decimalPlaces)); return regex.test(value); } getNumberRegexString(decimalPlaces = 0) { return (decimalPlaces !== 0) ? `^[+|-]?(((\\d{1,3}\\,)((\\d{3}\\,)?)(\\d{3}(\\.\\d{0,${decimalPlaces}})?))|(\\d{1,})|(\\d{0,}(\\.\\d{0,${decimalPlaces}})))$` : `^[+|-]?(((\\d{1,3}\\,)((\\d{3}\\,)?)(\\d{3}))|(\\d{1,}))$`; } round(value, decimals, type) { return type === RoundingType.Bankers ? this.roundBankers(value, decimals) : this.roundHalfUp(value, decimals); } roundForSalesTax(value) { return this.roundHalfUp(value, 2); } roundHalfUp(value, decimals) { return ((value !== null) && (value !== undefined)) ? this._halfUpRound(value, decimals) : value; } roundBankers(value, decimals) { return ((value !== null) && (value !== undefined)) ? this._bankersRound(value, decimals) : value; } _bankersRound(num, decimals) { var d = decimals || 0; var m = Math.pow(10, d); var n = +(d ? num * m : num).toFixed(8); var i = Math.floor(n), f = n - i; var e = 1e-8; var r = (f > 0.5 - e && f < 0.5 + e) ? ((i % 2 === 0) ? i : i + 1) : Math.round(n); return d ? r / m : r; } _halfUpRound(num, decimals) { var pow = Math.pow(10, (decimals) ? Math.abs(decimals) : 0); return Math.round(num * pow) / pow; } } export var RoundingType; (function (RoundingType) { RoundingType[RoundingType["Bankers"] = 1] = "Bankers"; RoundingType[RoundingType["HalfUp"] = 2] = "HalfUp"; })(RoundingType || (RoundingType = {})); //# sourceMappingURL=number-service.js.map