chinesmoney
Version:
金额转大写
48 lines (43 loc) • 1.43 kB
JavaScript
/**
* 数字金额转大写
* @param {*} n 金额,小数保留两位 数字 或者 字符串
* @returns 大写金额 例如:2.5, 返回:贰元伍角
*/
const chinesMoney = (n) => {
if (n == 0) {
return '零'
}
if (!/^(\+|-)?(0|[1-9]\d*)(\.\d+)?$/.test(n)) {
return "数据非法"
}
let unit = "仟佰拾亿仟佰拾万仟佰拾元角分"
let str = ''
n += '00'
let a = parseFloat(n);
if (a < 0) {
n = n.substr(1)
}
let p = n.indexOf('.')
if (p >= 0) {
n = n.substring(0, p) + n.substr(p + 1, 2);
}
unit = unit.substring(unit.length - n.length)
for (let i = 0; i < n.length; i++) {
str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i)
}
if (a > 0) {
return str.replace(/零(仟|佰|拾|角)/g, "零")
.replace(/(零)+/g, "零")
.replace(/零(万|亿|元)/g, "$1")
.replace(/(亿)万|壹(拾)/g, "$1$2")
.replace(/^元零?|零分/g, "")
.replace(/元$/g, "元整")
}
return "负" + str.replace(/零(仟|佰|拾|角)/g, "零")
.replace(/(零)+/g, "零")
.replace(/零(万|亿|元)/g, "$1")
.replace(/(亿)万|壹(拾)/g, "$1$2")
.replace(/^元零?|零分/g, "")
.replace(/元$/g, "元整")
}
module.exports = chinesMoney