人民币大写转换函数(JavaScript)

今天在博客园上看到了有人贴了 人民币大写转化函数(C#版) ,于是也顺便把自己以前的写的JavaScript版的转换函数贴出来,相互参考和学习一下。

该函数完成如下功能:

1、对一给定字符串,如:1234.55,转换成正确的中文货币描述:如:人民币壹仟贰佰叁拾四元五角五分

2、输入的字符串形式可以是以下几种:带分隔符的,如:123,456,789.00;不带分隔符的,如:123456789

3、输出的中文货币描述要符合规范,如:0.3----人民币三角;0.33----人民币三角三分;1----人民币壹元整
   100----人民币壹佰元整;1001----人民币壹仟零壹元整;10000001----人民币壹仟万零壹元整;
   10010001----人民币壹仟零壹万零壹元整,等

4、最大转换能到百亿


下面是运行效果:


具体的代码如下:

<! DOCTYPE HTML PUBLIC  " -//W3C//DTD HTML 4.0 Transitional//EN " >
< html >
    
< head >
        
< title ></ title >
        
< meta content = " Microsoft Visual Studio .NET 7.1 "  name = " GENERATOR " >
        
< meta content = " VisualStudio.HTML "  name = " ProgId " >
        
< meta content = " Microsoft Visual Studio .NET 7.1 "  name = " Originator " >
        
< script language = " jscript " >
/* ****************************************
     Copyright (c) 2004, Laser Lu      
          http://www.idow.net           
 ****************************************
*/
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_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(
" Empty input! " );
        
return   "" ;
    }
    
if  (currencyDigits.match( / [ ^ ,.\d] / !=   null ) {
        alert(
" Invalid characters in the input string! " );
        
return   "" ;
    }
    
if  ((currencyDigits).match( /^ ((\d{ 1 , 3 }(,\d{ 3 }) * (.((\d{ 3 },) * \d{ 1 , 3 })) ? ) | (\d + (.\d + ) ? ))$ / ==   null ) {
        alert(
" Illegal format of digit number! " );
        
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(
" Too large a number to convert! " );
        
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];
                zeroCount = 0;
            }
        }
        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[i];
            }
        }
    }
    
//  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 >
    
</ head >
    
< body >
        
< INPUT id = " Digits "  type = " text "  name = " Digits "  size = 20 >
        
< INPUT id = " Convert "  type = " button "  value = " Convert "  name = " Convert "  onclick = " Result.value = convertCurrency(Digits.value); " >
        
< INPUT id = " Result "  type = " text "  name = " Result "  size = 60 >
    
</ body >
</ html >

转载于:https://www.cnblogs.com/Laser_Lu/archive/2005/03/30/128464.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值