nsn-util
Version:
NSN工具辅助组件
168 lines (130 loc) • 4.52 kB
JavaScript
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';