UNPKG

nsn-util

Version:

NSN工具辅助组件

168 lines (130 loc) 4.52 kB
import { NConst } from 'nsn-const'; import * as NType from './NType'; var QIAN = '千'; var WANG = '万'; var YI = '亿'; /** 千 */ var QIAN_NUM = 1000; /** 万 */ var WANG_NUM = 10000; /** 亿 */ var YI_NUM = 100000000; /** * 6位数字以下直接以千分符分割 * 大于6位,小于8位,数字后面加单位 “万” * 大于8位,数字后面加单位 “亿” * * @param num 需要被转换的数值 * @param point 保留小数位 */ var translate = function translate(num) { var point = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; var tnum = translateNumUnit(num, point); return "".concat(tnum[0].toLocaleString()).concat(tnum[1]); }; /** * 6位数字以下直接以千分符分割 * 大于6位,小于8位,数字后面加单位 “万” * 大于8位,数字后面加单位 “亿” * * @param num 需要被转换的数值 * @param point 保留小数位 */ var translateNumUnit = function translateNumUnit(num) { var point = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; if (num) { // 将数字转换为字符串,然后通过split方法用.分隔,取到第0个 var numStr = num.toString().split(NConst.DOT)[0]; if (numStr.length >= 6 && numStr.length <= 8) { // 数字大于6位,小于8位,数字后面加单位万 var decimal = numStr.substring(numStr.length - 4, numStr.length - 4 + point); // 由千位,百位组成的一个数字 if (NType.isString(num)) { return [parseFloat(parseInt("".concat(parseFloat(num) / WANG_NUM)) + NConst.DOT + decimal), WANG]; } return [parseFloat(parseInt("".concat(num / WANG_NUM)) + NConst.DOT + decimal), WANG]; } else if (numStr.length > 8) { // 数字大于8位,数字后面加单位亿 var _decimal = numStr.substring(numStr.length - 8, numStr.length - 8 + point); if (NType.isString(num)) { return [parseFloat(parseInt("".concat(parseFloat(num) / YI_NUM)) + NConst.DOT + _decimal), YI]; } return [parseFloat(parseInt("".concat(num / YI_NUM)) + NConst.DOT + _decimal), YI]; } // 判断数字有多长,如果小于6,,表示10万以内的数字,直接显示 if (NType.isString(num)) { return [parseFloat(num), NConst.EMPTY]; } return [num, NConst.EMPTY]; } return [0, NConst.EMPTY]; }; /** * 将带有转换单位的数字拆分为数字+单位 */ var splitUnit = function splitUnit(translateNum) { if (translateNum) { if (translateNum.endsWith(QIAN)) { return [translateNum.split(QIAN)[0], QIAN]; } else if (translateNum.endsWith(WANG)) { return [translateNum.split(WANG)[0], WANG]; } else if (translateNum.endsWith(YI)) { return [translateNum.split(YI)[0], YI]; } } return [translateNum || NConst.DASHED, NConst.EMPTY]; }; var convertWQ = function convertWQ(unit, num) { var point = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3; if (num) { if (NType.isString(num)) { var numt = parseFloat("".concat(num).replaceAll(',', '')); return parseFloat((numt / unit).toFixed(point)); } var numw = num / unit; return parseFloat(numw.toFixed(point)); } return 0; }; /** * 以 亿 为单位转换数字,保留指定小数位 */ var convertYI = function convertYI(num, point) { return convertWQ(YI_NUM, num, point); }; /** * 以 万 为单位转换数字,保留指定小数位 */ var convertWANG = function convertWANG(num, point) { return convertWQ(WANG_NUM, num, point); }; /** * 以 千 为单位转换数字,保留指定小数位 */ var convertQIAN = function convertQIAN(num, point) { return convertWQ(QIAN_NUM, num, point); }; /** * 将小数转换为带有百分号的字符,保留指定小数位。 * @returns 数字未定义时,返回短横线 */ var getPercent = function getPercent(v) { var point = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2; if (v) { return (v * 100).toFixed(point) + '%'; } return NConst.DASHED; }; /** * 安全方式返回数字 * @returns 数字未定义时,返回 0 */ var getValue = function getValue(num) { if (num) { if (NType.isString(num)) { return parseFloat(num); } return num; } return 0; }; export { translate, translateNumUnit, splitUnit, convertYI, convertWANG, convertQIAN, getPercent, getValue, QIAN, QIAN_NUM, WANG, WANG_NUM, YI, YI_NUM }; export { isNumber, isInteger, isNaN } from 'lodash';