tav-ui
Version:
1 lines • 19.2 kB
Source Map (JSON)
{"version":3,"file":"formatNumber2.mjs","sources":["../../../../../packages/utils/formatNumber.ts"],"sourcesContent":["import { round, trimEnd } from 'lodash-es'\nimport { isNullOrUnDef } from './is'\n\n/**\n * @param number 要格式化的数字\n * @param decimals 保留几位小数\n * @param decPoint 小数点符号\n * @param thousandsSep 千分位符号\n * @returns formattedNumber\n */\nexport function formatNumber(\n number: number | string,\n decimals: number | 'auto' = 2,\n decPoint = '.',\n thousandsSep = ','\n): string {\n if (null === number) {\n return '-'\n } else if (undefined === number) {\n return number\n }\n number = `${number}`.replace(/[^0-9+-Ee.]/g, '')\n const n = !isFinite(+number) ? 0 : +number\n const toFixedFix = (n, prec) => {\n const k = 10 ** prec\n return `${round(n * k) / k}`\n }\n let prec\n // auto 最小2位 最大8位\n if (decimals == 'auto') {\n const arr = n.toString().split('.')\n if (arr[1] == undefined || arr[1].length < 2) {\n prec = 2\n } else if (arr[1].length > 6) {\n prec = 6\n } else {\n prec = arr[1].length\n }\n } else {\n prec = !isFinite(+decimals) ? 0 : Math.abs(decimals)\n }\n const s = toFixedFix(n, prec).split('.')\n const re = /(-?\\d+)(\\d{3})/\n while (re.test(s[0])) {\n s[0] = s[0].replace(re, `$1${thousandsSep}$2`)\n }\n if ((s[1] || '').length < prec) {\n s[1] = s[1] || ''\n s[1] += new Array(prec - s[1].length + 1).join('0')\n }\n return s.join(decPoint)\n}\n\n/**\n * @param number 要格式化的数字\n * @param chineseMultip 倍率,如果单位是万元的时候可以传10000\n * @returns string\n */\nexport function numberToChinese(num: number | string, chineseMultip = 1, max = 1e12) {\n if (isNullOrUnDef(num) || (typeof num === 'string' && /[^\\d.]/.test(num))) {\n return ''\n }\n const number = chineseMultiply(Number(num), chineseMultip)\n if (number > max) {\n return '金额过大暂不支持'\n }\n const chineseNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']\n const chineseUnits = [\n '',\n '拾',\n '佰',\n '仟',\n '万',\n '十',\n '百',\n '千',\n '亿',\n '十',\n '百',\n '千',\n '兆',\n '十',\n '百',\n '千',\n '京',\n '十',\n '百',\n '千',\n '垓',\n '十',\n '百',\n '千',\n '秭',\n '十',\n '百',\n '千',\n // '穣',\n // '沟',\n // '涧',\n // '正',\n // '载',\n // '极',\n ]\n const chineseDecimals = ['角', '分', '厘', '毫']\n // console.log(num,number)\n let result = ''\n if (number == 0) {\n return chineseNums[0]\n }\n\n const numStr = number.toString()\n const integerPart = numStr.split('.')[0]\n const decimalPart = numStr.split('.')[1] || ''\n\n // 处理整数部分\n const len = integerPart.length\n let useLastUni = false\n for (let i = 0; i < len; i++) {\n const digit = parseInt(integerPart[i])\n const unit = len - i - 1\n if (digit !== 0) {\n result += chineseNums[digit] + chineseUnits[unit]\n } else {\n // 处理连续的零,只添加一个零\n if (result[result.length - 1] !== chineseNums[0]) {\n const lastPart = integerPart.slice(i, integerPart.length - 1)\n // const usedPart = integerPart.slice(0, i)\n if (lastPart.length > 3 && Number(lastPart) === 0 && !useLastUni) {\n useLastUni = true\n result += chineseUnits[unit - (unit % 4)]\n } else {\n result += chineseNums[digit]\n }\n }\n }\n }\n\n // 处理小数部分\n const decimalLen = decimalPart.length\n if (decimalLen > 0) {\n result += '圆'\n }\n for (let i = 0; i < decimalLen; i++) {\n const digit = parseInt(decimalPart[i])\n if (digit !== 0) {\n result += chineseNums[digit] + (i < chineseDecimals.length ? chineseDecimals[i] : '')\n }\n }\n // if (result.endsWith('零')) {\n // result = result.\n // }\n return trimEnd(result, '零')\n}\n\nexport function numberToSimpleChinese(num: number): string {\n const numbers = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']\n const units = ['', '十', '百', '千']\n const bigUnits = ['', '万', '亿']\n if (num < 0 || num >= 10e12) {\n console.warn('数字太大')\n return '-'\n }\n\n // 处理 0\n if (num === 0) return numbers[0]\n\n // 处理负数\n const isNegative = num < 0\n num = Math.abs(num)\n\n // 分离整数和小数部分\n const [integer, decimal] = num.toString().split('.')\n\n const convertSection = (section: number): string => {\n let result = ''\n let unitPos = 0\n let needZero = false\n\n while (section > 0) {\n const digit = section % 10\n if (digit === 0) {\n if (needZero) {\n result = numbers[0] + result\n needZero = false\n }\n } else {\n result = numbers[digit] + units[unitPos] + result\n needZero = true\n }\n unitPos++\n section = Math.floor(section / 10)\n }\n return result\n }\n\n // 处理整数部分\n let integerResult = ''\n let section = 0\n let sectionPos = 0\n let needZero = false\n let tmp = parseInt(integer)\n\n while (tmp > 0) {\n section = tmp % 10000\n if (section !== 0) {\n const sectionStr = convertSection(section)\n if (needZero) {\n integerResult = numbers[0] + integerResult\n }\n integerResult = sectionStr + (section === 0 ? '' : bigUnits[sectionPos]) + integerResult\n needZero = section < 1000 && section > 0\n }\n sectionPos++\n tmp = Math.floor(tmp / 10000)\n }\n\n // 处理特殊情况\n integerResult = integerResult.replace(/零+$/, '')\n integerResult = integerResult.replace(/零+/g, '零')\n integerResult = integerResult.replace(/零([万亿])/g, '$1')\n\n if (integerResult.startsWith('一十')) {\n integerResult = integerResult.substring(1)\n }\n\n // 处理小数部分\n let decimalResult = ''\n if (decimal) {\n decimalResult = '点'\n for (const digit of decimal) {\n decimalResult += numbers[parseInt(digit)]\n }\n }\n\n // 组合最终结果\n let result = ''\n\n // 添加负号\n if (isNegative) {\n result += '负'\n }\n\n // 添加整数和小数部分\n result += integerResult\n if (decimalResult) {\n result += decimalResult\n }\n\n return result || numbers[0]\n}\n\nexport function add(arg1, arg2) {\n let r1, r2\n try {\n r1 = arg1.toString().split('.')[1].length\n } catch (e) {\n r1 = 0\n }\n try {\n r2 = arg2.toString().split('.')[1].length\n } catch (e) {\n r2 = 0\n }\n const c = Math.abs(r1 - r2)\n const m = 10 ** Math.max(r1, r2)\n if (c > 0) {\n const cm = 10 ** c\n if (r1 > r2) {\n arg1 = Number(arg1.toString().replace('.', ''))\n arg2 = Number(arg2.toString().replace('.', '')) * cm\n } else {\n arg1 = Number(arg1.toString().replace('.', '')) * cm\n arg2 = Number(arg2.toString().replace('.', ''))\n }\n } else {\n arg1 = Number(arg1.toString().replace('.', ''))\n arg2 = Number(arg2.toString().replace('.', ''))\n }\n return (arg1 + arg2) / m\n}\nexport function subtract(arg1, arg2) {\n let r1, r2\n try {\n r1 = arg1.toString().split('.')[1].length\n } catch (e) {\n r1 = 0\n }\n try {\n r2 = arg2.toString().split('.')[1].length\n } catch (e) {\n r2 = 0\n }\n const m = 10 ** Math.max(r1, r2) //last modify by deeka //动态控制精度长度\n const n = r1 >= r2 ? r1 : r2\n return ((arg1 * m - arg2 * m) / m).toFixed(n)\n}\nexport function chineseMultiply(arg1: number, arg2: number) {\n let m = 0\n const s1 = arg1.toString(),\n s2 = arg2.toString()\n try {\n m += s1.split('.')[1].length\n } catch (e) {}\n try {\n m += s2.split('.')[1].length\n } catch (e) {}\n return (Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) / 10 ** m\n}\nexport function divide(arg1, arg2) {\n let t1 = 0,\n t2 = 0\n\n try {\n t1 = arg1.toString().split('.')[1].length\n } catch (e) {}\n try {\n t2 = arg2.toString().split('.')[1].length\n } catch (e) {}\n const r1 = Number(arg1.toString().replace('.', ''))\n const r2 = Number(arg2.toString().replace('.', ''))\n return (r1 / r2) * 10 ** (t2 - t1)\n}\n"],"names":[],"mappings":"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"}