数字大写对照表:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 壹 | 贰 | 叁 | 肆 | 伍 | 陆 | 柒 | 捌 |
| 9 | 0 | 十 | 百 | 千 | 万 | 亿 | 米 |
| 玖 | 零 | 拾 | 佰 | 仟 | 万 | 亿 | 圆 |
JS将金额数字转大写的方式封装 ,下面为人人整理些常用的实现方式。
方式一:
function digitUppercase(price) {
const fraction = ['角', '分'];
const digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
const unit = [
['米', '万', '亿'],
['', '拾', '佰', '仟'],
];
let num = Math.abs(price);
let s = '';
fraction.forEach((item, index) => {
s += (digit[Math.floor(num * 10 * (10 ** index)) % 10] + item).replace(/零./, '');
});
s = s || '整';
num = Math.floor(num);
for (let i = 0; i < unit[0].length && num > 0; i += 1) {
let p = '';
for (let j = 0; j < unit[1].length && num > 0; j += 1) {
p = digit[num % 10] + unit[1][j] + p;
num = Math.floor(num / 10);
}
s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
}
return s.replace(/(零.)*零米/, '米').replace(/(零.)+/g, '零').replace(/^整$/, '零米整');
}
方式二
//代码如下所示:
function convertCurrency(money) {
//汉字的数字
var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
//基本单米
var cnIntRadice = new Array('', '拾', '佰', '仟');
//对应整数部门扩展单米
var cnIntUnits = new Array('', '万', '亿', '兆');
//对应小数部门单米
var cnDecUnits = new Array('角', '分', '毫', '厘');
//整数金额时后面跟的字符
var cnInteger = '整';
//整型完以后的单米
var cnIntLast = '米';
//最大处置的数字
var maxNum = 999999999999999.9999;
//金额整数部门
var integerNum;
//金额小数部门
var decimalNum;
//输出的中文金额字符串
var chineseStr = '';
//星散金额后用的数组,预界说
var parts;
if (money == '') { return ''; }
money = parseFloat(money);
if (money >= maxNum) {
//超出最大处置数字
return '';
}
if (money == 0) {
chineseStr = cnNums[0] + cnIntLast + cnInteger;
return chineseStr;
}
//转换为字符串
money = money.toString();
if (money.indexOf('.') == -1) {
integerNum = money;
decimalNum = '';
} else {
parts = money.split('.');
integerNum = parts[0];
decimalNum = parts[1].substr(0, 4);
}
//获取整型部门转换
if (parseInt(integerNum, 10) > 0) {
var zeroCount = 0;
var IntLen = integerNum.length;
for (var i = 0; i < IntLen; i++) {
var n = integerNum.substr(i, 1);
var p = IntLen - i - 1;
var q = p / 4;
var m = p % 4;
if (n == '0') {
zeroCount++;
} else {
if (zeroCount > 0) {
chineseStr += cnNums[0];
}
//归零
zeroCount = 0;
chineseStr += cnNums[parseInt(n)] + cnIntRadice[m];
}
if (m == 0 && zeroCount < 4) {
chineseStr += cnIntUnits[q];
}
}
chineseStr += cnIntLast;
}
//小数部门
if (decimalNum != '') {
var decLen = decimalNum.length;
for (var i = 0; i < decLen; i++) {
var n = decimalNum.substr(i, 1);
if (n != '0') {
chineseStr += cnNums[Number(n)] + cnDecUnits[i];
}
}
}
if (chineseStr == '') {
chineseStr += cnNums[0] + cnIntLast + cnInteger;
} else if (decimalNum == '') {
chineseStr += cnInteger;
}
return chineseStr;
}
方式三
/阿拉伯数字转换为大写汉字
function Arabia_To_Chinese(n) {
var unit = "仟佰拾亿仟佰拾万仟佰拾米角分", str = "";
n += "00";
var a = n.indexOf('-');
if(a != -1){
n = n.substring(1);
var indexpoint = n.indexOf('.'); // 若是是小数,截取小数点前面的位数
if (indexpoint >= 0){
n = n.substring(0, indexpoint) + n.substr(indexpoint+1, 2); // 若为小数,截取需要使用的unit单米
}
unit = unit.substr(unit.length - n.length); // 若为整数,截取需要使用的unit单米
for (var i=0; i < n.length; i++){
str += "零壹贰叁肆伍陆柒捌玖".charAt(n.charAt(i)) + unit.charAt(i); //遍历转化为大写的数字
}
return "负数"+str.replace(/零(仟|佰|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|米)/g, "$1").replace(/(亿)万/g, "$1").replace(/^米零?|零分/g, "").replace(/米$/g, "米整").replace(/角$/g, "角整"); // 替换掉数字内里的零字符,获得效果
}else{
var indexpoint = n.indexOf('.'); // 若是是小数,截取小数点前面的位数
if (indexpoint >= 0){
n = n.substring(0, indexpoint) + n.substr(indexpoint+1, 2); // 若为小数,截取需要使用的unit单米
}
unit = unit.substr(unit.length - n.length); // 若为整数,截取需要使用的unit单米
for (var i=0; i < n.length; i++){
str += "零壹贰叁肆伍陆柒捌玖".charAt(n.charAt(i)) + unit.charAt(i); //遍历转化为大写的数字
}
return str.replace(/零(仟|佰|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|米)/g, "$1").replace(/(亿)万/g, "$1").replace(/^米零?|零分/g, "").replace(/米$/g, "米整").replace(/角$/g, "角整"); // 替换掉数字内里的零字符,获得效果
}
}
方式四:
<script>
function moneyArabiaToChinese(Num) { //阿拉伯数字转中文大写花样
var isNegative = false; // 是否负数
if(Num < 0) {
Num = -Num;
isNegative = true;
}
if(typeof Num == 'number') {
Num = Num.toString();
}
for(var i = Num.length - 1; i >= 0; i--) {
Num = Num.replace(",", ""); // 替换money中的“,”
Num = Num.replace(" ", ""); // 替换money中的空格
}
Num = Num.replace("¥", ""); // 替换掉可能泛起的¥字符
if(isNaN(Num)) { // 验证输入的字符是否为数字
return;
}
// ---字符处置完毕,最先转换,转换接纳前后两部门划分转换---//
part = String(Num).split(".");
newchar = "";
// 小数点前举行转化
for(var i = part[0].length - 1; i >= 0; i--) {
if(part[0].length > 10) {
alertWarning("位数过大,无法盘算");
return "";
} // 若数目跨越拾亿单米,提醒
tmpnewchar = "";
perchar = part[0].charAt(i);
switch(perchar) {
case "0":
tmpnewchar = "零" + tmpnewchar;
break;
case "1":
tmpnewchar = "壹" + tmpnewchar;
break;
case "2":
tmpnewchar = "贰" + tmpnewchar;
break;
case "3":
tmpnewchar = "叁" + tmpnewchar;
break;
case "4":
tmpnewchar = "肆" + tmpnewchar;
break;
case "5":
tmpnewchar = "伍" + tmpnewchar;
break;
case "6":
tmpnewchar = "陆" + tmpnewchar;
break;
case "7":
tmpnewchar = "柒" + tmpnewchar;
break;
case "8":
tmpnewchar = "捌" + tmpnewchar;
break;
case "9":
tmpnewchar = "玖" + tmpnewchar;
break;
}
switch(part[0].length - i - 1) {
case 0:
tmpnewchar = tmpnewchar + "米";
break;
case 1:
if(perchar != 0)
tmpnewchar = tmpnewchar + "拾";
break;
case 2:
if(perchar != 0)
tmpnewchar = tmpnewchar + "佰";
break;
case 3:
if(perchar != 0)
tmpnewchar = tmpnewchar + "仟";
break;
case 4:
tmpnewchar = tmpnewchar + "万";
break;
case 5:
if(perchar != 0)
tmpnewchar = tmpnewchar + "拾";
break;
case 6:
if(perchar != 0)
tmpnewchar = tmpnewchar + "佰";
break;
case 7:
if(perchar != 0)
tmpnewchar = tmpnewchar + "仟";
break;
case 8:
tmpnewchar = tmpnewchar + "亿";
break;
case 9:
tmpnewchar = tmpnewchar + "拾";
break;
}
newchar = tmpnewchar + newchar;
}
// 小数点之后举行转化
if(Num.indexOf(".") != -1) {
if(part[1].length > 2) {
alertWarning("小数点之后只能保留两位,系统将自动截段");
part[1] = part[1].substr(0, 2);
}
for(var i = 0; i < part[1].length; i++) {
tmpnewchar = "";
perchar = part[1].charAt(i);
switch(perchar) {
case "0":
tmpnewchar = "零" + tmpnewchar;
break;
case "1":
tmpnewchar = "壹" + tmpnewchar;
break;
case "2":
tmpnewchar = "贰" + tmpnewchar;
break;
case "3":
tmpnewchar = "叁" + tmpnewchar;
break;
case "4":
tmpnewchar = "肆" + tmpnewchar;
break;
case "5":
tmpnewchar = "伍" + tmpnewchar;
break;
case "6":
tmpnewchar = "陆" + tmpnewchar;
break;
case "7":
tmpnewchar = "柒" + tmpnewchar;
break;
case "8":
tmpnewchar = "捌" + tmpnewchar;
break;
case "9":
tmpnewchar = "玖" + tmpnewchar;
break;
}
if(i == 0)
tmpnewchar = tmpnewchar + "角";
if(i == 1)
tmpnewchar = tmpnewchar + "分";
newchar = newchar + tmpnewchar;
}
}
// 替换所有无用汉字
while(newchar.search("零零") != -1)
newchar = newchar.replace("零零", "零");
newchar = newchar.replace("零亿", "亿");
newchar = newchar.replace("亿万", "亿");
newchar = newchar.replace("零万", "万");
newchar = newchar.replace("零米", "米");
newchar = newchar.replace("零角", "");
newchar = newchar.replace("零分", "");
if(newchar.charAt(newchar.length - 1) == "米" || newchar.charAt(newchar.length - 1) == "角") {
newchar = newchar + "整";
}
if(isNegative) {
newchar = '负' + newchar;
}
return newchar;
}
</script>
1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入
2.腾讯云: 提供云服务器、云数据库、云存储、视频与CDN、域名等服务。腾讯云各种产物的最新流动,优惠券领取点击进入
3.广告同盟: 整理了现在主流的广告同盟平台,若是你有流量,可以作为参考选择适合你的平台点击进入
链接: http://www.fly63.com/article/detial/3707