UNPKG

prefix-si

Version:

SI, IEC, BS1852 compatible number formatter

83 lines (82 loc) 2.57 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var typescript_object_utils_1 = require("typescript-object-utils"); var standards = { si: { minPrefix: -8, prefixes: ["y", "z", "a", "f", "p", "n", "μ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y"], base: 1000 }, iec: { minPrefix: 0, prefixes: ["", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei", "Zi", "Yi"], base: 1024 }, bs1852_R: { minPrefix: 0, prefixes: ["R", "K", "M", "G", "T"], base: 1000 }, bs1852_F: { minPrefix: -4, prefixes: ["p", "n", "μ", "m", "F"], base: 1000 } }; var defaults = { binary: false, round: 2, spacer: "", decimalMark: "." }; function prefix(value, unit, options) { options = typescript_object_utils_1.merge(defaults, options || {}); var standard; if (options.bs1852) { if (unit === "R") { standard = standards.bs1852_R; } else if (unit === "F") { standard = standards.bs1852_F; } else { standard = standards.si; } } else { standard = options.binary ? standards.iec : standards.si; } var minPrefix = standard.minPrefix; var prefixes = standard.prefixes; var maxPrefix = prefixes.length + minPrefix - 1; var base = standard.base; var absValue = Math.abs(value); var exponent = absValue ? Math.floor(Math.log(absValue) / Math.log(base)) : 0; exponent = Math.min(maxPrefix, Math.max(minPrefix, exponent)); var prefix = prefixes[exponent - minPrefix]; var prefixBase = Math.pow(base, exponent); var val = value / prefixBase; var valString = String(val); unit = unit ? unit : ""; if (options.fixed) { valString = val.toFixed(options.fixed); } else if (options.precision) { valString = val.toPrecision(options.precision); } else { var roundPow = Math.pow(10, +options.round); valString = String(Math.round(val * roundPow) / roundPow); } if (options.bs1852) { var parts = valString.split("."); if (parts.length == 2) { return (parts[0] == "0" ? "" : parts[0]) + (prefix ? prefix : (unit ? unit : options.decimalMark)) + (parts[1]); } else { return valString + (prefix ? prefix : unit) + (valString.length == 1 ? "0" : ""); } } return valString.replace(".", options.decimalMark) + options.spacer + prefix + unit; } exports.prefix = prefix;