UNPKG

util-helpers

Version:

一个基于业务场景的工具方法库

117 lines (114 loc) 3.72 kB
import { isNaN } from 'ut2'; import { checkBoundary } from './utils/math.util.js'; import devWarn from './utils/devWarn.js'; var chnNumberChar = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']; var chnUnitChar = ['', '十', '百', '千']; var big5NumberChar = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; var big5UnitChar = ['', '拾', '佰', '仟']; var numberChar; var unitChar; var unitSection; function sectionToChinese(section) { var str = ''; var chnstr = ''; var zero = false; var unitPos = 0; while (section > 0) { var v = section % 10; if (v == 0) { if (zero) { zero = false; chnstr = numberChar[v] + chnstr; } } else { zero = true; str = numberChar[v]; str += unitChar[unitPos]; chnstr = str + chnstr; } unitPos++; section = Math.floor(section / 10); } return chnstr; } function convertInteger(num) { var numInt = Math.floor(num); var unitPos = 0; var strIns = ''; var chnStr = ''; var needZero = false; if (numInt === 0) { return numberChar[0]; } while (numInt > 0) { var section = numInt % 10000; if (needZero) { chnStr = numberChar[0] + chnStr; } strIns = sectionToChinese(section); strIns += section !== 0 ? unitSection[unitPos] : unitSection[0]; chnStr = strIns + chnStr; needZero = section < 1000 && section > 0; numInt = Math.floor(numInt / 10000); unitPos++; } return chnStr; } function convertDecimal(num) { var strNum = num + ''; var index = strNum.indexOf('.'); var ret = ''; if (index > -1) { var decimalStr = strNum.slice(index + 1); ret = mapNumberChar(decimalStr); } return ret; } function mapNumberChar(num) { var strNum = num + ''; var ret = ''; for (var i = 0, len = strNum.length; i < len; i++) { ret += numberChar[parseInt(strNum[i])]; } return ret; } function numberToChinese(num, options) { if (options === void 0) { options = {}; } var _a = options.big5, big5 = _a === void 0 ? false : _a, _b = options.unit, unit = _b === void 0 ? true : _b, _c = options.zero, zero = _c === void 0 ? '' : _c, _d = options.negative, negative = _d === void 0 ? '负' : _d, _e = options.unitConfig, unitConfig = _e === void 0 ? {} : _e; var _f = options.decimal, decimal = _f === void 0 ? '' : _f; if (typeof num !== 'number' || isNaN(num)) { devWarn("\u53C2\u6570\u9519\u8BEF ".concat(num, "\uFF0C\u8BF7\u4F20\u5165\u6570\u5B57")); return ''; } checkBoundary(num); if (big5) { numberChar = big5NumberChar.slice(); unitChar = big5UnitChar.slice(); decimal = decimal || '點'; } else { numberChar = chnNumberChar.slice(); unitChar = chnUnitChar.slice(); decimal = decimal || '点'; } var unitWan = unitConfig.w || '万'; var unitYi = unitConfig.y || '亿'; var unitWanYi = unitWan + unitYi; unitSection = ['', unitWan, unitYi, unitWanYi]; if (zero) { numberChar[0] = zero; } var preStr = num < 0 ? negative : ''; var chnInteger; var numAbs = Math.abs(num); if (unit) { chnInteger = convertInteger(numAbs); } else { chnInteger = mapNumberChar(Math.floor(numAbs)); } var chnDecimal = convertDecimal(numAbs); return chnDecimal ? "".concat(preStr).concat(chnInteger).concat(decimal).concat(chnDecimal) : "".concat(preStr).concat(chnInteger); } export { numberToChinese as default };