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 条评论
登录 后参与评论

相关文章

来自专栏开发与安全

90% of python in 90 minutes

注:本文整理自 http://www.slideshare.net/MattHarrison4/learn-90 -----------------------...

2180
来自专栏cnblogs

Javascript的原型继承,说清楚

     一直以来对Javascript的原型、原型链、继承等东西都只是会用和了解,但没有深入去理解这门语言关于继承这方面的本质和特点。闲暇之余做的理解和总...

1769
来自专栏软件开发 -- 分享 互助 成长

CRC校验码

循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明...

2656
来自专栏恰童鞋骚年

数据结构基础温故-1.线性表(下)

在上一篇中,我们了解了单链表与双链表,本次将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循...

1032
来自专栏码匠的流水账

聊聊flink的SourceFunction

flink-streaming-java_2.11-1.6.2-sources.jar!/org/apache/flink/streaming/api/func...

2303
来自专栏扎心了老铁

java优雅的使用elasticsearch api

本文给出一种优雅的拼装elasticsearch查询的方式,可能会使得使用elasticsearch的方式变得优雅起来,使得代码结构很清晰易读。 建立elast...

1.1K7
来自专栏用户2442861的专栏

Python: Enum枚举的实现

http://www.cnblogs.com/codingmylife/archive/2013/05/31/3110656.html

2342
来自专栏一个小程序员的成长笔记

理想的继承范式——寄生组合式继承

833
来自专栏高性能服务器开发

(三)dict哈希结构1

昨天分析完adlist的Redis代码,今天马上马不停蹄的继续学习Redis代码中的哈希部分的结构学习,不过在这里他不叫什么hashMap,而是叫dict,而且...

2945
来自专栏码匠的流水账

springboot2自定义statsd指标前缀

springboot2引入了micrometer,1.x版本的spring.metrics.export.statsd.prefix在2版本中已经被标记为废弃,...

1382

扫码关注云+社区

领取腾讯云代金券