专栏首页菩提树下的杨过javascript实现数字转大写金额的函数

javascript实现数字转大写金额的函数

<SCRIPT type="text/javascript" Charset="GB2312">
 function convertCurrency(currencyDigits) {
 // Constants:
 var MAXIMUM_NUMBER = 99999999999.99;
 // Predefine the radix characters and currency symbols for output:
 var CN_ZERO = "零";
 var CN_ONE = "壹";
 var CN_TWO = "贰";
 var CN_THREE = "叁";
 var CN_FOUR = "肆";
 var CN_FIVE = "伍";
 var CN_SIX = "陆";
 var CN_SEVEN = "柒";
 var CN_EIGHT = "捌";
 var CN_NINE = "玖";
 var CN_TEN = "拾";
 var CN_HUNDRED = "佰";
 var CN_THOUSAND = "仟";
 var CN_TEN_THOUSAND = "万";
 var CN_HUNDRED_MILLION = "亿";
 //var CN_SYMBOL = "¥:";
 var CN_SYMBOL="";
 var CN_DOLLAR = "元";
 var CN_TEN_CENT = "角";
 var CN_CENT = "分";
 var CN_INTEGER = "整";
 
 // Variables:
 var integral; // Represent integral part of digit number.
 var decimal; // Represent decimal part of digit number.
 var outputCharacters; // The output result.
 var parts;
 var digits, radices, bigRadices, decimals;
 var zeroCount;
 var i, p, d;
 var quotient, modulus;
 
 // Validate input string:
 currencyDigits = currencyDigits.toString();
 if (currencyDigits == "") {
 alert("请输入要转换的数字!");
 return "";
 }
 if (currencyDigits.match(/[^,.\d]/) != null) {
 alert("数字中含有非法字符!");
 return "";
 }
 if ((currencyDigits).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) == null) {
 alert("错误的数字格式!");
 return "";
 }
 
 // Normalize the format of input digits:
 currencyDigits = currencyDigits.replace(/,/g, ""); // Remove comma delimiters.
 currencyDigits = currencyDigits.replace(/^0+/, ""); // Trim zeros at the beginning.
 // Assert the number is not greater than the maximum number.
 if (Number(currencyDigits) > MAXIMUM_NUMBER) {
 alert("超出转换最大范围!");
 return "";
 }
 
 // Process the coversion from currency digits to characters:
 // Separate integral and decimal parts before processing coversion:
 parts = currencyDigits.split(".");
 if (parts.length > 1) {
 integral = parts[0];
 decimal = parts[1];
 // Cut down redundant decimal digits that are after the second.
 decimal = decimal.substr(0, 2);
 }
 else {
 integral = parts[0];
 decimal = "";
 }
 // Prepare the characters corresponding to the digits:
 digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE);
 radices = new Array("", CN_TEN, CN_HUNDRED, CN_THOUSAND);
 bigRadices = new Array("", CN_TEN_THOUSAND, CN_HUNDRED_MILLION);
 decimals = new Array(CN_TEN_CENT, CN_CENT);
 // Start processing:
 outputCharacters = "";
 // Process integral part if it is larger than 0:
 if (Number(integral) > 0) {
 zeroCount = 0;
 for (i = 0; i < integral.length; i++) {
 p = integral.length - i - 1;
 d = integral.substr(i, 1);
 quotient = p / 4;
 modulus = p % 4;
 if (d == "0") {
 zeroCount++;
 }
 else {
 if (zeroCount > 0)
 {
 outputCharacters += digits[0];
 }
 zeroCount = 0;
 outputCharacters += digits[Number(d)] + radices[modulus];
 }
 if (modulus == 0 && zeroCount < 4) {
 outputCharacters += bigRadices[quotient];
 }
 }
 outputCharacters += CN_DOLLAR;
 }
 // Process decimal part if there is:
 if (decimal != "") {
 for (i = 0; i < decimal.length; i++) {
 d = decimal.substr(i, 1);
 if (d != "0") {
 outputCharacters += digits[Number(d)] + decimals;
 }
 }
 }
 // Confirm and return the final output string:
 if (outputCharacters == "") {
 outputCharacters = CN_ZERO + CN_DOLLAR;
 }
 if (decimal == "") {
 outputCharacters += CN_INTEGER;
 }
 outputCharacters = CN_SYMBOL + outputCharacters;
 return outputCharacters;
 }
 </SCRIPT>
 <INPUT id=Digits name=Digits size="15" value="1000001" > <INPUT id=Convert onclick="Result.value = convertCurrency(Digits.value);" type=button value=Convert name=Convert height="185659256"> <INPUT id=Result size=30 name=Result > 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • javascript:算法笔记

    入门级算法-线性查找-时间复杂度O(n)--相当于算法界中的HelloWorld //线性搜索(入门HelloWorld) //A为数组,x为要...

    菩提树下的杨过
  • Javascript版的Repeater控件实现

    其实有点标题党了,呵呵,主要是项目的特殊性,出于性能考虑项目经理规定不能用任何服务端控件(包括Repeater控件),同时尽量减少服务端处理,并尽可能压缩最终生...

    菩提树下的杨过
  • flash开发中如何实现界面代码分离

    “flash开发”发展到今天,大体上已经细分为二个分支:Flash 设计师 和 Flash程序员,然而设计师不懂代码,程序员不懂设计,如何把这二种角色有机结合起...

    菩提树下的杨过
  • 剑指offer-JavaScript版(12-22题)

    12.给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

    前端迷
  • Docker 入门(二):从实例来看 Dockerfile 和 Compose

    上一文中提到,每次对容器做了改动,如果不把它 commit 成新的镜像,在删除容器后,数据也会丢失,有没有什么更好的办法来保存数据呢?使用数据卷就可以解决这个问...

    zhisheng
  • 现代C++之如何返回一个对象?

    一个用来返回的对象,通常应当是可移动构造 / 赋值的,一般也同时是可拷贝构造 / 赋值的。如果这样一个对象同时又可以默认构造,我们就称其为一个半正则(semir...

    公众号guangcity
  • MRO领域正在探索无人机检修服务

    当前,各行业的企业都正转向无人机服务,希望借无人机取得战略优势,维修业也不例外,而且正在将无人机、机器人、数据等结合在一起,增强无人机的“行为能力”。 目前,一...

    企鹅号小编
  • 更新自己,不要影响其他人

    最近围绕着c++和C#的讨论越来越激烈,firelong努力着证明自己的观点,园子里一些大大们也在激烈的辩证着,作为小鸟的我,旁观,看看一笑而过吧。 其实无论哪...

    脑洞的蜂蜜
  • 机器学习实战 -- 机器学习解决问题的通用流程

    通用流程主要分为四部分:问题建模、特征工程、模型选择、模型融合。​​​​​​​​​​​​​​

    MachineLP
  • SAP最佳业务实践:ETO–报价处理(232)-13项目重新计划

    image.png CJ20N项目重新计划 要确定新成本,项目需要重新计划。 角色项目经理 后勤®项目系统®项目®项目构造器 1. 从工作清单中选择相关项目 (...

    SAP最佳业务实践

扫码关注云+社区

领取腾讯云代金券