金额数字 转中文大写 有三种办法:

//方法一: 代码最少:
export function DX1(n) {if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n))return "数据非法";var unit = "仟佰拾亿仟佰拾万仟佰拾元角分", str = "";n += "00";var p = n.indexOf('.');if (p >= 0)n = n.substring(0, p) + n.substr(p + 1, 2);unit = unit.substr(unit.length - n.length);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$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整");
}//缺点: 如果是10.02 会显示的是拾元零贰分,  没有零角 改法 有可能是 一下代码 但是我自己没实验过,这是根据方法三突然想起来的改法return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "零").replace(/元$/g, "元整");

方法二 : 和方法一存在同样的问题:

export function DX2(dValue) {var maxDec = 2;// 验证输入金额数值或数值字符串:dValue = dValue.toString().replace(/,/g, "");dValue = dValue.replace(/^0+/, ""); // 金额数值转字符、移除逗号、移除前导零if (dValue == "") {return "零元整";} // (错误:金额为空!)else if (isNaN(dValue)) {return "错误:金额不是合法的数值!";}var minus = ""; // 负数的符号"-"的大写:"负"字。可自定义字符,如"(负)"。var CN_SYMBOL = ""; // 币种名称(如"人民币",默认空)if (dValue.length > 1) {if (dValue.indexOf('-') == 0) {dValue = dValue.replace("-", "");minus = "负";} // 处理负数符号"-"if (dValue.indexOf('+') == 0) {dValue = dValue.replace("+", "");} // 处理前导正数符号"+"(无实际意义)}// 变量定义:var vInt = "";var vDec = ""; // 字符串:金额的整数部分、小数部分var resAIW; // 字符串:要输出的结果var parts; // 数组(整数部分.小数部分),length=1时则仅为整数。var digits, radices, bigRadices, decimals; // 数组:数字(0~9——零~玖);基(十进制记数系统中每个数字位的基是10——拾,佰,仟);大基(万,亿,兆,京,垓,杼,穰,沟,涧,正);辅币(元以下,角/分/厘/毫/丝)。var zeroCount; // 零计数var i, p, d; // 循环因子;前一位数字;当前位数字。var quotient, modulus; // 整数部分计算用:商数、模数。// 金额数值转换为字符,分割整数部分和小数部分:整数、小数分开来搞(小数部分有可能四舍五入后对整数部分有进位)。var NoneDecLen = (typeof (maxDec) == "undefined" || maxDec == null || Number(maxDec) < 0 || Number(maxDec) > 5); // 是否未指定有效小数位(true/false)parts = dValue.split('.'); // 数组赋值:(整数部分.小数部分),Array的length=1则仅为整数。if (parts.length > 1) {vInt = parts[0];vDec = parts[1]; // 变量赋值:金额的整数部分、小数部分if (NoneDecLen) {maxDec = vDec.length > 5 ? 5 : vDec.length;} // 未指定有效小数位参数值时,自动取实际小数位长但不超5。var rDec = Number("0." + vDec);rDec *= Math.pow(10, maxDec);rDec = Math.round(Math.abs(rDec));rDec /= Math.pow(10, maxDec); // 小数四舍五入var aIntDec = rDec.toString().split('.');if (Number(aIntDec[0]) == 1) {vInt = (Number(vInt) + 1).toString();} // 小数部分四舍五入后有可能向整数部分的个位进位(值1)if (aIntDec.length > 1) {vDec = aIntDec[1];} else {vDec = "";}} else {vInt = dValue;vDec = "";if (NoneDecLen) {maxDec = 0;}}if (vInt.length > 44) {return "错误:金额值太大了!整数位长【" + vInt.length.toString() + "】超过了上限——44位/千正/10^43(注:1正=1万涧=1亿亿亿亿亿,10^40)!";}// 准备各字符数组 Prepare the characters corresponding to the digits:digits = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); // 零~玖radices = new Array("", "拾", "佰", "仟"); // 拾,佰,仟bigRadices = new Array("", "万", "亿", "兆", "京", "垓", "杼", "穰", "沟", "涧", "正"); // 万,亿,兆,京,垓,杼,穰,沟,涧,正decimals = new Array("角", "分", "厘", "毫", "丝"); // 角/分/厘/毫/丝resAIW = ""; // 开始处理// 处理整数部分(如果有)if (Number(vInt) > 0) {zeroCount = 0;for (i = 0; i < vInt.length; i++) {p = vInt.length - i - 1;d = vInt.substr(i, 1);quotient = p / 4;modulus = p % 4;if (d == "0") {zeroCount++;} else {if (zeroCount > 0) {resAIW += digits[0];}zeroCount = 0;resAIW += digits[Number(d)] + radices[modulus];}if (modulus == 0 && zeroCount < 4) {resAIW += bigRadices[quotient];}}resAIW += "元";}// 处理小数部分(如果有)for (i = 0; i < vDec.length; i++) {d = vDec.substr(i, 1);if (d != "0") {resAIW += digits[Number(d)] + decimals[i];}}// 处理结果if (resAIW == "") {resAIW = "零" + "元";} // 零元if (vDec == "") {resAIW += "整";} // …元整resAIW = CN_SYMBOL + minus + resAIW; // 人民币/负……元角分/整return resAIW;
}

最完整的写法是方法三, 但是代码太多了, 如果方法一改完的那个可以用, 方法一是代码最精简,最好用的

export function DX(num) {return toChies(num);
}function toChies(num) {var fuhao = "";var text = num + "";if (text.indexOf("-") > -1) {num = text.replace("-", "");fuhao = "负";}var money1 = new Number(num);var monee = Math.round(money1 * 100).toString(10);var leng = monee.length;var monval = "";for (var i = 0; i < leng; i++) {monval =monval + to_upper(monee.charAt(i)) + to_mon(leng - i - 1);}return fuhao + repace_acc(monval);
}
function to_upper(a) {switch (a) {case "0":return "零";break;case "1":return "壹";break;case "2":return "贰";break;case "3":return "叁";break;case "4":return "肆";break;case "5":return "伍";break;case "6":return "陆";break;case "7":return "柒";break;case "8":return "捌";break;case "9":return "玖";break;default:return "";}
}
function to_mon(a) {if (a > 10) {a = a - 8;return to_mon(a);}switch (a) {case 0:return "分";break;case 1:return "角";break;case 2:return "元";break;case 3:return "拾";break;case 4:return "佰";break;case 5:return "仟";break;case 6:return "万";break;case 7:return "拾";break;case 8:return "佰";break;case 9:return "仟";break;case 10:return "亿";break;}
}
function repace_acc(Money) {Money = Money.replace("零分", "");Money = Money.replace("零角", "零角");var yy;var outmoney;outmoney = Money;yy = 0;while (true) {var lett = outmoney.length;outmoney = outmoney.replace("零元", "元");outmoney = outmoney.replace("零万", "万");outmoney = outmoney.replace("零亿", "亿");outmoney = outmoney.replace("零仟", "零");outmoney = outmoney.replace("零佰", "零");outmoney = outmoney.replace("零零", "零");outmoney = outmoney.replace("零拾", "零");outmoney = outmoney.replace("亿万", "亿零");outmoney = outmoney.replace("万仟", "万零");outmoney = outmoney.replace("仟佰", "仟零");yy = outmoney.length;if (yy == lett) {break;}}yy = outmoney.length;if (outmoney.charAt(yy - 1) == "零") {outmoney = outmoney.substring(0, yy - 1);}yy = outmoney.length;if (outmoney.charAt(yy - 1) == "元") {outmoney = outmoney + "整";}return outmoney;
}

金额数字 转中文大写相关推荐

  1. JAVA 纯数字/金额数字转中文大写

    有时候一些金额数字需要转成中文大写展示到发票的金额框这类地方,包括一些纯粹的数量非金额的数字的大写转换,网上看很多都是金额的,纯数字的话有些不同,这里写了一个数字转中文大写的工具类: 1:金额数字转中 ...

  2. 金额数字转中文大写(转)

    处理能力: 整数部分:9999999999999999(16位长,仟万亿) 小数部分:3位,多于3位舍去(不做四舍五入) 运行结果:1.23 壹元贰角叁分 1234567890123456.123 壹 ...

  3. Java 将数字金额转成中文大写

    一个 Java 将数字金额转成中文大写的工具类,还不是很完善. import java.util.regex.Matcher; import java.util.regex.Pattern;publi ...

  4. 如何把数字金额转换成中文大写

    问题:要求把万亿级别内的浮点数转换成中文大写,例如把数字1112221000060.254400转换成:壹万壹仟壹佰贰拾贰亿贰仟壹佰万零陆拾元零贰角伍分 分析:关键是先把double类型转换成char ...

  5. 把数字金额转换成中文大写数字

    //把数字金额转换成中文大写数字 function changeNumMoneyToChinese(money) { var cnNums = new Array("零", &qu ...

  6. 阿拉伯数字小写金额转换成中文大写金C额程序说明

    阿拉伯数字小写金额转换成中文大写金额C程序说明 1.问题的提出 寒假帮同学交缴话费时,不经意间看到收据上同时有小写金额和大写金额,想想各种各样的票据诸如缴费收据.银行业务回单.商场销售凭证.专用发票等 ...

  7. js收据、发票等表格数据格式化,js把数字转为中文大写

    1.表格金额格式化 /*** 把金额转为发票.收据等表格能遍历显示的数据* * @param {money} Numner 金额大小* @param {max} Numner 带(角.分的位数)* 例 ...

  8. 2-34 中文大写金额。声明RMB人民币类如下,实现其中成员方法。public class rMB // 人民币类 {// 返回金额x的中文大写形式字符串,如x=123 45,转化为“壹佰贰拾

    1.实验题目: 2-34 中文大写金额. 声明RMB人民币类如下,实现其中成员方法. public class rMB // 人民币类 { // 返回金额x的中文大写形式字符串,如x=123 45,转 ...

  9. Keras-10 【Seq2Seq示例】数字转中文大写

    Keras Seq2Seq示例 任务很简单,将数字转为中文大写金额,例如 11288 -> 壹万壹仟零捌拾捌元整 我们将尝试利用seq2seq来解决这一问题,整个示例包括以下部分: 建立数据集 ...

最新文章

  1. 低代码可视化报表开源工具,只要在线拖拽就能做出复杂数据报表
  2. java 线程之对象的同步和异步
  3. mysql 防注入 php_PHP+mysql防止SQL注入的方法小结
  4. 2020巨量引擎用户旅游全周期行为动机调研报告
  5. android 开发套件_Android套件
  6. easyui 图标下拉框
  7. C语言 循环群,数学函数符号
  8. MATLAB矩阵基本运算
  9. 未来教育计算机二级2016版,20163未来教育计算机二级题库(操作题).docx
  10. 第一个node.js应用
  11. 机器学习:anconda安装 scikit-learn ,lazypredict成功
  12. 千古奇才---埃舍尔
  13. 【算法学习笔记】75. 动态规划 棋盘型 期望计算 1390 畅畅的牙签盒(改)
  14. WPS表格级联菜单设置方法
  15. 洛谷:P1460 [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins(DFS)
  16. 读研计算机技术与控制工程比较,控制理论与控制工程
  17. 如何从ZIP文件解压缩文件
  18. 简述你计划使用的应用开发框架,及该框架的特点
  19. PTA 7-144 最矮的巨人
  20. AES加密算法原理及python实现

热门文章

  1. BAT的「圈地运动」
  2. 【C#窗体登录界面的一些问题和方法】
  3. 【Java成王之路】EE初阶第十篇:(网络编程) 4
  4. Ewebeditor最新漏洞和漏洞指数
  5. 记忙碌充实且效率奇高的一天
  6. js实现图片粘贴到网页
  7. CAD导出eps格式文件
  8. 魅族黄章深夜发文:雷军做小米不是因为我“不舍股份”
  9. Spark交集/差集/并集/拉链
  10. Hgame2021,web,week1