/* * func 数字转换中文类 * author shuang * date 2012-08-17 * email:shuangbrother@sina.com */class transformnumbernew{ public $chinadata = array('1'=>'壹','2'=>'贰','3'=>'叁','4'=>'肆','5'=>'伍','6'=>'陆','7'=>'柒','8'=>'捌','9'=>'玖'); public $chinadataint = array('1'=>'','2'=>'拾','3'=>'佰','4'=>'仟'); public $chinadatafloat = array('1'=>'角','2'=>'分'); private $intnumber; // string private $floatnumber; // string public $error = array('0'=>'零','def'=>'数据格式不支持'); public function __construct($intnumber,$floatnumber){ $this->intnumber = $intnumber; $this->floatnumber = $floatnumber; } public function gettransint(){ /*如果数字是0或非数字字符返回错误提示*/ if($this->intnumber == 0){ return $this->errornotice('def'); } if(!preg_match('/^\d+$/',$this->intnumber)){ return $this->errornotice('def'); } /*去除字符串开头是0的字符*/ $this->dealintzero(); $data = array(); /*把字符串分成4个一组*/ $data = str_split(strrev($this->intnumber),4); return $this->settransint($data); } public function gettransfloat(){ return $this->settransfloat($this->floatnumber,strlen($this->floatnumber)); } private function dealintzero(){ $j = strlen($this->intnumber); for($i=0;$i if($this->intnumber{$i} != 0){ $this->intnumber = substr($this->intnumber,$i,$j); break; } } } private function settransint($data){ $str = ''; $newarray = array(); while(list($key,$val) = each($data)){ $j = strlen($val); if($j /*如果字符串不够4位,我们用0补齐*/ $val = str_pad($val, 4, 0, str_pad_right); } for($i=0;$i /*每四个字符串一循环;如果字符串为0,判断一下它的前一位是否为0,如果是0,不处理。不是0,我们用“零”补齐*/ if($val{$i} == 0){ if($val{$i-1}){ $newarray[$key][] = '零'; } }else{ $newarray[$key][] = $this->chinadata[$val{$i}].$this->chinadataint[$i+1]; } } } unset($data,$key,$val); /*上面的循环我们已经得到了转换成中文的数组;下面我排列即可*/ foreach(array_reverse($newarray,true) as $key=>$val){ if($key == 0){ $str .= implode('',array_reverse($val)); } if($key%2 == 1){ $j = floor($key/2); if($j == 0){ $str .= implode('',array_reverse($val)).'万'; }else{ $str .= implode('',array_reverse($val)).'万'.str_pad('',3*$j,'亿'); } } if($key%2 == 0 && $key != 0){ if($key/2 > 1){ $str .= implode('',array_reverse($val)).'万万'.str_pad('',3*(floor($key/2)-1),'亿'); }else{ $str .= implode('',array_reverse($val)).'亿'; } } } unset($newarray,$key,$val,$j); return $str; } //紧支持两位小数 private function settransfloat($floatdata,$pos){ if($pos > 2){ return $this->errornotice('def'); } if($floatdata{0} == 0){ $data[] = '零'; }else{ $data[] = $this->chinadata[$floatdata{0}].$this->chinadatafloat[1]; } if($floatdata一念之间 != 0 ){ $data[] = $this->chinadata[$floatdata一念之间].$this->chinadatafloat[2]; } return implode('',$data); } public function errornotice($error){ return $this->error[$error]; }}$num = new transformnumbernew('450252352007760006601000300','80');echo $num->gettransint();echo $num->gettransfloat();
复制代码