@cainiaofe/cn-utils
Version:
菜鸟前端基础工具库
168 lines (167 loc) • 5.38 kB
JavaScript
import { __assign } from "tslib";
import { STANDARD_NUM_SYS_OPTION } from '../const';
import { locale } from '../locale';
import { I18nNumber } from './number';
/**
* 通过语种获取当前数字系统小数点
* @param lang 语种
* @returns
*/
export var getDecimalSeparator = function (lang) {
try {
var parts = new Intl.NumberFormat(lang, 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 '.';
}
};
/**
* 通过语种获取当前数字系统格式化配置
* @param lang 语种
* @returns
*/
export function getNumSysFormatConf(lang) {
var getGroupSeparator = function () {
try {
var parts = new Intl.NumberFormat(lang, 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, 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: getDecimalSeparator(lang),
groupSeparator: getGroupSeparator(),
groupSize: 3,
secondaryGroupSize: getSecondaryGroupSize(),
fractionGroupSeparator: '',
fractionGroupSize: 0,
};
}
/**
*通过语种获取当前数字系统格式化字符串
* @param lang
* @returns
*/
export var numberFormat = function (num, lang, options) {
try {
var str = new Intl.NumberFormat(lang, __assign(__assign({}, STANDARD_NUM_SYS_OPTION), (options || {}))).format(num);
return str;
}
catch (error) {
console.error(error);
return num;
}
};
/**
*通过语种获取当前数字系统格式化字符串
* @param lang
* @returns
*/
export 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;
}
};
/**
*基于 Intl 自动数字简写
* @param num - 数字
* @param lang - 语种
* @returns
*/
export var numberCompact = function (num, lang, options) {
try {
var format = new Intl.NumberFormat(lang, __assign(__assign({ notation: 'compact' }, 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 I18nNumber(numberUnFormat(partsValue, lang), lang),
compact: compact === null || compact === void 0 ? void 0 : compact.value,
},
};
}
catch (error) {
console.error(error);
return null;
}
};
/**
*基于 Intl 自动数字简写
* @param num - 数字
* @param lang - 语种
* @returns
*/
export var numberCompactByCon = function (num, conversion, lang) {
try {
var i18nNumber = new I18nNumber(num, lang);
var cons = (locale[lang] || 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;
}
};
/**
*通过语种格式化货币金额
* @param amount
* @param currency
* @param lang
* @returns
*/
export var currencyFormat = function (amount, currency, lang, options) {
try {
var formatter = new Intl.NumberFormat(lang, __assign(__assign(__assign({}, STANDARD_NUM_SYS_OPTION), { style: 'currency', currency: currency }), (options || {})));
return formatter.format(amount);
}
catch (error) {
console.error(error);
return NaN;
}
};