任意阿拉伯数字转人民币大写

  今天在群里谈论着玩的时候,问群里人呢,让他们提供一些php的算法,然后“Visvoy”给出了这样一个题目“任意阿拉伯数字转人民币大写”,于是个人试着写了写,不过里面有些bug,等日后自己在完善下。

 1 function capital($data){
2
3 $array = explode(".", $data);
4 $array[0] = (string)strrev($array[0]);
5 //判断是否存在小数点
6 if(!empty($array[1])){
7 $array[1] = (string)strrev($array[1]);
8 $type = "1";
9 return capital_data($array[0]).capital_data($array[1],$type);
10 }else{
11
12 return capital_data($array[0]);
13 }
14 }
15
16 function capital_data($data,$type = 0){
17
18 $capital = array("零","壹","贰","弎","肆","伍","陆","柒","捌","玖");
19
20 if($type == 0){
21 $RMB = array("元","十","百","千","万","十","百","千","亿","十","百","千","万");
22 }else{
23 $RMB = array("厘","毫","分","角");
24 }
25 //将整型转为字符型
26 $data = (string)$data;
27
28 //判断位数
29 $num = strlen($data);
30
31 if($num>13){
32 return $data;
33 }
34 $record = array();
35 for($i=0 ; $i < $num ; $i++){
36 $record[] = $capital[$data[$i]].$RMB[$i];
37 }
38 //反转数组
39 $record = array_reverse($record);
40
41 $string = "";
42 foreach($record as $value){
43 $string .= $value;
44 }
45
46 return $string;
47 }
48
49
50 $data = 1123123.678;
51 echo $data."<br>";
52 print_r(capital($data));


以下为群内“苏demo”的个人实现代码,也一并附上:

 1 function cny($ns) {   
2 echo $ns;
3 static $cnums=array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖"), $cnyunits=array("圆","角","分"), $grees=array("拾","佰","仟","万","拾","佰","仟","亿");
4 list($ns1,$ns2)=explode(".",$ns,2);
5
6 $ns2=array_filter(array($ns2[1],$ns2[0]));
7 $ret=array_merge($ns2,array(implode("",_cny_map_unit(str_split($ns1),$grees)),""));
8 $ret=implode("",array_reverse(_cny_map_unit($ret,$cnyunits)));
9 return str_replace(array_keys($cnums),$cnums,$ret);
10 }
11 function _cny_map_unit($list,$units) {
12 $ul=count($units); $xs=array();
13 foreach (array_reverse($list) as $x) {
14 $l=count($xs);
15 if ($x!="0" || !($l%4)) $n=($x=='0'?'':$x).($units[($l-1)%$ul]);
16 else $n=is_numeric($xs[0][0])?$x:'';
17 array_unshift($xs,$n);
18 }
19 return $xs;
20 }
21 $Ren = cny(100.00);
22 var_dump($Ren);

以下为“奋斗的馒头”的解决思路:

 1、求位数 

2、把数字分拆放倒数组中

3、预定位数后边的单位文字

4、循环放出数组并插入预定单位文字

5、输出




 

posted @ 2012-02-03 20:00  小冰PHPer  阅读(540)  评论(0)    收藏  举报