人财事物信息化 - 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";
}
// ...原有代码...
};