【评论】评 小写金额转换大写金额的代码
时间:2006-06-20
来源:互联网
- <?
- class ChineseNumber
- {
- var $basical=array(0=>"零","一","二","三","四","五","六","七","八","九");
- //var $basical=array(0=>"零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
- var $advanced=array(1=>"十","百","千");
- //var $advanced=array(1=>"拾","佰","仟");
- var $top=array(1=>"万","亿");
- var $level; // 以4位为一级
- // 先实现万一下的数的转换
- function ParseNumber($number)
- {
- if ($number>999999999999) // 只能处理到千亿。
- return "数字太大,无法处理。抱歉!";
- if ($number==0)
- return "零";
- for($this->level=0;$number>0.0001;$this->level++,$number=floor($number / 10000))
- {
- // 对于中文来说,应该是4位为一组。
- // 四个变量分别对应 个、十、百、千 位。
- $n1=substr($number,-1,1);
- if($number>9)
- $n2=substr($number,-2,1);
- else
- $n2=0;
- if($number>99)
- $n3=substr($number,-3,1);
- else
- $n3=0;
- if($number>999)
- $n4=substr($number,-4,1);
- else
- $n4=0;
- if($n4)
- $parsed[$this->level].=$this->basical[$n4].$this->advanced[3];
- else
- if(($number/10000)>=1) // 千位为0,数值大于9999的情况
- $parsed[$this->level].="零";
- if($n3)
- $parsed[$this->level].=$this->basical[$n3].$this->advanced[2];
- else
- if(!ereg("零$",$parsed[$this->level]) && ($number / 1000)>=1) // 不出现连续两个“零”的情况
- $parsed[$this->level].="零";
- if($n2)
- $parsed[$this->level].=$this->basical[$n2].$this->advanced[1];
- else
- if(!ereg("零$",$parsed[$this->level]) && ($number / 100)>=1) // 不出现连续两个“零”的情况
- $parsed[$this->level].="零";
- if($n1)
- $parsed[$this->level].=$this->basical[$n1];
- if($parsed[$this->level]!="零")
- {
- if(ereg("零$",$parsed[$this->level]))
- $parsed[$this->level]=substr($parsed[$this->level],0,strlen($parsed[$this->level])-
- 2);
- if($this->level>0)
- $result=$parsed[$this->level].$this->top[$this->level].$result;
- else
- $result=$parsed[$this->level].$result;
- }
- }
- //for($this->level-=1;$this->level>=0;$this->level--)
- //{
- // $result.=$parsed[$this->level].$this->top[$this->level];
- //}
- //if(ereg("零$",$result))
- // $result=substr($result,0,strlen($result)-2);
- return $result;
- }
- };
- //////////////////////// TEST //////////
- $num = '100000000005.03200586';
- $c=new ChineseNumber(); // echo $c->ParseNumber(100000000005);
- $num_1 = preg_replace("'\..*$'","",$num);
- $num_2 = preg_replace("'^.*\.'","",$num);
- $new_num = $c->ParseNumber($num_1);
- $new_num .= fix($num_2);
- echo $new_num;
- //////////////////////
- function fix($v)
- {
- if( !isset($v) or "1".$v==1 )return;
- $bas=array("零","一","二","三","四","五","六","七","八","九");
- $len = strlen($v);
- $c = Array();
- while (--$len>-1)
- {
- $c[$len] = $bas{ $v{$len} };
- }
- ksort($c);
- $v = join("",$c);
- return "点".$v;
- }
- ?>
JavaScript版 代码:-------------------------------------------------------------------------------- function to_rmb(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("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]; } } 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; } if(outputCharacters=="零元") { outputCharacters=""; }else{ outputCharacters = CN_SYMBOL + outputCharacters + CN_INTEGER ; } return outputCharacters
作者: PHPCHINA_CMS 发布时间: 2006-06-19
作者: visor 发布时间: 2006-06-19
作者: PHPChina 发布时间: 2006-06-20
作者: fnet 发布时间: 2006-06-20
作者: Per 发布时间: 2006-06-20
作者: forest 发布时间: 2006-06-20
作者: 七月十五 发布时间: 2006-06-25
[ 本帖最后由 hiler 于 2006-7-25 15:36 编辑 ]
作者: hiler 发布时间: 2006-07-25
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28