数字转换成中文(繁体)
- 将数字分割成4个一组
// 声明一些单位,中文数字
const chars = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
const units = ["", "十", "百", "千"];
const bigUnit = ["", "万", "亿"];
function toChinese(n) {
let res = "";
const numStr = n
.toString()
.replace(/(?=(\d{4})+$)/g, ",") // 将数字分为四个一组
.split(",")
.filter(Boolean);
// 将得到的数字分割成 4个数字 为一部分
for (let i = 0; i < numStr.length; i++) {
const part = numStr[i];
let c = _transform(part); // 转成中文
}
}
- 数字转化成中文
// 将数字转化成为中文
function _transform(n) {
let res = "";
if (n === "0000") return chars[0]; // 处理 0000 的情况
for (let i = 0; i < n.length; i++) {
let c = chars[n[i]];
let u = units[n.length - i - 1];
if (c === chars[0]) { // 当出现 “零”,不能出现单位;也就是不能有 “零千”
u = "";
}
res += c + u;
}
res = handleZero(res);
return res;
}
// 当出现两个连续的 零 ,变成一个;第二个去掉末尾的零
function handleZero(str) {
return str.replace(/零{2,}/g, "零").replace(/零+$/, "");
}
- 加上大单位
// 数字转换成中文
function toChinese(n) {
let res = "";
const numStr = n
.toString()
.replace(/(?=(\d{4})+$)/g, ",")
.split(",")
.filter(Boolean);
// 将得到的数字分割成 4个数字 为一部分
for (let i = 0; i < numStr.length; i++) {
const part = numStr[i];
let c = _transform(part);
let u = bigUnit[numStr.length - i - 1];
if (c === chars[0]) {
u = "";
}
res += c + u;
}
res = handleZero(res);
return res;
}
- 转成繁体
// 添加简体/繁体映射
const wordsMap = {
零: "零",
一: "壹",
二: "贰",
三: "叁",
四: "肆",
五: "伍",
六: "陆",
七: "柒",
八: "捌",
九: "玖",
十: "拾",
百: "佰",
千: "仟",
万: "萬",
亿: "亿",
};
// 将数字转换成大写的汉字
function toBigChinese(num) {
let result = toChinese(num);
words.value = result
return result.split("").map(s =>wordsMap[s]).join("");
}
- 效果
短视频平台偶然砍到,用作记录,多多见谅。