UNPKG

@cainiaofe/cn-utils

Version:

菜鸟前端基础工具库

178 lines (177 loc) 6.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.currencyFormat = exports.numberCompactByCon = exports.numberCompact = exports.numberUnFormat = exports.numberFormat = exports.getNumSysFormatConf = exports.getDecimalSeparator = void 0; var tslib_1 = require("tslib"); var const_1 = require("../const"); var locale_1 = require("../locale"); var number_1 = require("./number"); /** * 通过语种获取当前数字系统小数点 * @param lang 语种 * @returns */ var getDecimalSeparator = function (lang) { try { var parts = new Intl.NumberFormat(lang, const_1.STANDARD_NUM_SYS_OPTION).formatToParts(1.1); var decimal = parts.find(function (i) { return i.type === 'decimal'; }); return ((decimal === null || decimal === void 0 ? void 0 : decimal.value) || '.'); } catch (error) { console.error(error); return '.'; } }; exports.getDecimalSeparator = getDecimalSeparator; /** * 通过语种获取当前数字系统格式化配置 * @param lang 语种 * @returns */ function getNumSysFormatConf(lang) { var getGroupSeparator = function () { try { var parts = new Intl.NumberFormat(lang, const_1.STANDARD_NUM_SYS_OPTION).formatToParts(11111); var group = parts.find(function (i) { return i.type === 'group'; }); return (group === null || group === void 0 ? void 0 : group.value) || ''; } catch (error) { console.error(error); return ''; } }; var getSecondaryGroupSize = function () { var _a; try { var parts = new Intl.NumberFormat(lang, const_1.STANDARD_NUM_SYS_OPTION).formatToParts(111111); var groups = parts.filter(function (i) { return i.type === 'integer'; }); var secondaryGroup = groups[groups.length - 2]; return ((_a = secondaryGroup === null || secondaryGroup === void 0 ? void 0 : secondaryGroup.value) === null || _a === void 0 ? void 0 : _a.length) || 0; } catch (error) { console.error(error); return 0; } }; return { decimalSeparator: (0, exports.getDecimalSeparator)(lang), groupSeparator: getGroupSeparator(), groupSize: 3, secondaryGroupSize: getSecondaryGroupSize(), fractionGroupSeparator: '', fractionGroupSize: 0, }; } exports.getNumSysFormatConf = getNumSysFormatConf; /** *通过语种获取当前数字系统格式化字符串 * @param lang * @returns */ var numberFormat = function (num, lang, options) { try { var str = new Intl.NumberFormat(lang, tslib_1.__assign(tslib_1.__assign({}, const_1.STANDARD_NUM_SYS_OPTION), (options || {}))).format(num); return str; } catch (error) { console.error(error); return num; } }; exports.numberFormat = numberFormat; /** *通过语种获取当前数字系统格式化字符串 * @param lang * @returns */ var numberUnFormat = function (numStr, lang) { try { var config = getNumSysFormatConf(lang); if (!config.groupSeparator || !config.decimalSeparator) { return numStr; } return numStr.replace(config.groupSeparator, '').replace(config.decimalSeparator, '.'); } catch (error) { console.error(error); return numStr; } }; exports.numberUnFormat = numberUnFormat; /** *基于 Intl 自动数字简写 * @param num - 数字 * @param lang - 语种 * @returns */ var numberCompact = function (num, lang, options) { try { var format = new Intl.NumberFormat(lang, tslib_1.__assign(tslib_1.__assign({ notation: 'compact' }, const_1.STANDARD_NUM_SYS_OPTION), (options || {}))); var value = format.format(num); var parts = format.formatToParts(num); var compact = parts.find(function (i) { return i.type === 'compact'; }); var partsValue = parts.reduce(function (accumulator, currentValue) { if (['integer', 'group', 'decimal', 'fraction'].includes(currentValue.type)) { return "".concat(accumulator).concat(currentValue.value); } return accumulator; }, ''); return { value: value, parts: { value: new number_1.I18nNumber((0, exports.numberUnFormat)(partsValue, lang), lang), compact: compact === null || compact === void 0 ? void 0 : compact.value, }, }; } catch (error) { console.error(error); return null; } }; exports.numberCompact = numberCompact; /** *基于 Intl 自动数字简写 * @param num - 数字 * @param lang - 语种 * @returns */ var numberCompactByCon = function (num, conversion, lang) { try { var i18nNumber = new number_1.I18nNumber(num, lang); var cons = (locale_1.locale[lang] || locale_1.locale['en-US']).NUMBER_COMPACT; var con = cons.reduce(function (accumulator, currentValue) { if (Math.abs(currentValue.conversion - conversion) < Math.abs(accumulator.conversion - conversion)) { return currentValue; } return accumulator; }, cons[0]); return { value: i18nNumber.div(con.conversion), compact: con.compact, }; } catch (error) { console.error(error); return null; } }; exports.numberCompactByCon = numberCompactByCon; /** *通过语种格式化货币金额 * @param amount * @param currency * @param lang * @returns */ var currencyFormat = function (amount, currency, lang, options) { try { var formatter = new Intl.NumberFormat(lang, tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, const_1.STANDARD_NUM_SYS_OPTION), { style: 'currency', currency: currency }), (options || {}))); return formatter.format(amount); } catch (error) { console.error(error); return NaN; } }; exports.currencyFormat = currencyFormat;