@cainiaofe/cn-utils
Version:
菜鸟前端基础工具库
178 lines (177 loc) • 6.06 kB
JavaScript
;
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;