人财事物信息化 - chinese_number.js

number_systems.js增加中国数字的四位分级法:

    chinese: [
        {
            divisor: 1.0e16,
            symbol: __("兆", null, "Number system"),
        },
        {
            divisor: 1.0e12,
            symbol: __("万亿", null, "Number system"),
        },
        {
            divisor: 1.0e8,
            symbol: __("亿", null, "Number system"),
        },
        {
            divisor: 1.0e4,
            symbol: __("万", null, "Number system"),
        },
    ],

utils.jsget_number_system的国家增加China

    get_number_system: function (country) {
        if (["Bangladesh", "India", "Myanmar", "Pakistan"].includes(country)) {
            return number_systems.indian;
        } else if (country == "Nepal") {
            return number_systems.nepalese;
        } else if (country == "China") {
            return number_systems.chinese;
        } else {
            return number_systems.default;
        }
    },

number_format.js增加对应的四位分级格式

// 在原有代码基础上追加以下内容

// 新增中国格式定义
frappe.number_format_info["#,####"] = { decimal_str: ".", group_sep: ",", group_size: 4 };
frappe.number_format_info["#,####.##"] = { decimal_str: ".", group_sep: ",", group_size: 4 };
frappe.number_format_info["#,#### 万"] = { decimal_str: ".", group_sep: " ", group_size: 4 };
frappe.number_format_info["#.##万"] = { decimal_str: "", group_sep: ".", group_size: 4 };

// 修改格式解析函数
function get_number_format_info(format) {
  let info = frappe.number_format_info[format] || {};
  if (typeof info === "string") info = { decimal_str: info };

  info.group_sep = info.group_sep || ",";
  info.group_size = info.group_size || 3;
  info.precision = (format.match(/\.(\d+)/) || [])[1]?.length || 0;

  if (format.includes("万")) {
    info.unit = "万";
    info.group_size = 4;
  }

  return info;
}

// 修改核心格式化函数
frappe.format_number = function (v, format, decimals) {
  // ...原有代码...

  const info = get_number_format_info(format);
  let group_sep = info.group_sep;
  let group_size = info.group_size;

  // 处理特殊单位(如"万")
  if (info.unit) {
    const unit_pos = Math.floor((v.length - 1) / group_size);
    v = v.replace(/,/g, "");
    v = v.slice(0, unit_pos * group_size) + info.unit + v.slice(unit_pos * group_size);
  }

  // 分组处理
  if (group_sep && group_size !== 3) {
    let integer = part[0];
    let str = "";
    let offset = integer.length % group_size;

    for (let i = integer.length; i > 0; i--) {
      str = integer.charAt(i - 1) + str;
      if (i > offset && (i - offset - 1) % group_size === 0) {
        str = group_sep + str;
      }
    }
    part[0] = str || "0";
  }

  // ...原有代码...
};
Discard
Save
Review Changes ← Back to Content
Message Status Space Raised By Last update on