数字(万亿内)转中文格式

189 阅读1分钟

数字转换成中文(繁体)

  1. 将数字分割成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);    // 转成中文
  }

}

  1. 数字转化成中文
// 将数字转化成为中文
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(/零+$/, "");
}

  1. 加上大单位
// 数字转换成中文
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;
}
  1. 转成繁体
// 添加简体/繁体映射
const wordsMap = {
  零: "零",
  一: "壹",
  二: "贰",
  三: "叁",
  四: "肆",
  五: "伍",
  六: "陆",
  七: "柒",
  八: "捌",
  九: "玖",
  十: "拾",
  百: "佰",
  千: "仟",
  万: "萬",
  亿: "亿",
};
// 将数字转换成大写的汉字
function toBigChinese(num) {
  let result = toChinese(num);
  words.value = result
  return result.split("").map(s =>wordsMap[s]).join("");
}

  1. 效果

1.png

2.png

3.png
短视频平台偶然砍到,用作记录,多多见谅。