js金额小写转中文大写包含负数金额的所有方法
时间: 2023-11-06 08:06:57 浏览: 40
下面是一个可以将小写金额转换为中文大写金额的 JavaScript 函数,包括处理负数金额的情况。需要注意的是,这个函数只能处理到亿级别的金额,超出亿的部分会被忽略。
```javascript
function numToCny(num) {
// 定义数字和汉字的对应关系
var cnyMap = {
0: '零',
1: '壹',
2: '贰',
3: '叁',
4: '肆',
5: '伍',
6: '陆',
7: '柒',
8: '捌',
9: '玖'
};
var cnyUnits = {
0: '元',
1: '拾',
2: '佰',
3: '仟',
4: '万',
5: '拾',
6: '佰',
7: '仟',
8: '亿'
};
var negative = false; // 是否为负数
if (num < 0) {
negative = true;
num = -num;
}
var numStr = num.toFixed(2).toString(); // 转换为字符串
var parts = numStr.split('.'); // 分离整数和小数部分
var integer = parts[0];
var decimal = parts[1];
var cny = ''; // 中文大写金额
if (parseInt(integer) === 0) {
cny += cnyMap[0];
} else {
var zeroCount = 0; // 记录连续出现的零的个数
for (var i = 0, len = integer.length; i < len; i++) {
var num = integer[i];
var unit = cnyUnits[len - 1 - i];
var digit = cnyMap[num];
if (num === '0') {
zeroCount++;
} else {
if (zeroCount > 0) {
cny += cnyMap[0];
}
zeroCount = 0;
cny += digit + unit;
}
}
cny += cnyUnits[0];
}
if (decimal === '00') {
cny += '整';
} else {
cny += cnyMap[decimal[0]] + '角';
if (decimal[1] !== '0') {
cny += cnyMap[decimal[1]] + '分';
}
}
if (negative) {
cny = '负' + cny;
}
return cny;
}
```
你可以像这样调用这个函数:
```javascript
console.log(numToCny(123456789.12)); // 壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元壹角贰分
console.log(numToCny(-123456789.12)); // 负壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元壹角贰分
```
希望对你有帮助!