최근 디지털 중국어로 변환하는 문제가 계속 발생해서 공유하고자 글을 작성하게 되었습니다. 조언을 부탁드립니다.
- /*
- * func 디지털 전환 중국어 수업
- * 저자 shuang
- * 날짜 2012-08-17
- * 이메일:shuangbrother@sina.com
- */
-
- class TransFormNumberNew{
- public $chinaData = array('1'=>'壹','2'=>'이','3'=>' 삼','4'=>'사','5'=>'오','6'=>'루','7'=>'旒','8'=>'捌','9'=>'玖');
- public $chinaDataInt = array('1'=>'','2'=>'Shi','3'=>'Hundred ','4'=>'仟');
- public $chinaDataFloat = array('1'=>'angle','2'=>'fen');
- private $Intnumber; // string
- private $Floatnumber; // string
- public $error = array('0'=>'zero','def'=>'지원되지 않는 데이터 형식');
-
- 공개 함수 __construct($intnumber,$floatnumber){
- $this->Intnumber = $intnumber;
- $this->Floatnumber = $floatnumber;
- }
- 공개 함수 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);
- }
- 공개 함수 getTransFloat(){
- return $this->setTransFloat($this->Floatnumber,strlen($this->Floatnumber));
- }
- 비공개 함수 dealIntZero() {
- $j = strlen($this->Intnumber);
- for($i=0;$i<$j;$i ){
- if($this->Intnumber{$ i} != 0){
- $this->Intnumber = substr($this->Intnumber,$i,$j);
- break;
- }
- }
- }
- 비공개 함수 setTransInt($data){
- $str = '';
- $newArray = array();
- while(list($key,$val) = Each($data)) {
- $j = strlen($val);
- if($j < 4){
- /*문자열이 4자리로 충분하지 않으면 0으로 채웁니다*/
- $ val = str_pad($val , 4, "0", STR_PAD_RIGHT);
- }
- for($i=0;$i<$j;$i ){
- /*4개의 문자열마다 반복 ; if string 0이면 이전 비트가 0인지 확인하고, 0이면 처리하지 않습니다. 0이 아니라 "0"을 사용하여 채웁니다. */
- if($val{$i} == 0){
- if($val{$i-1}){
- $newArray[$ key][] = 'zero';
- }
- }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 . '',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,'Billion');
- }
- }
- if($key%2 == 0 && $key != 0 ){
- if($key/2 > 1){
- $str .= implode('',array_reverse($val)).'万万'.str_pad('',3*(floor( $key/ 2)-1),'1억');
- }else{
- $str .= implode('',array_reverse($val)).'1억';
- }
- }
- }
- unset($newArray,$key,$val,$j);
- return $str;
- }
- //소수점 두 자리를 엄격하게 지원합니다
- 비공개 함수 setTransFloat( $floatData,$pos){
- if($pos > 2){
- return $this->errorNotice('def');
- }
- if($floatData{0} = = 0){
- $data[] = 'zero';
- }else{
- $data[] = $this->chinaData[$floatData{0}].$this-> [1];
- }
- if($floatData!= 0 ){
- $data[] = $this->chinaData[$floatData].$this-> ;chinaDataFloat[2];
- }
- return implode('',$data);
- }
- 공개 함수 errorNotice($error){
- return $this->error[$ error];
- }
- }
- $num = new TransFormNumberNew('450252352007760006601000300','80');
- echo $num->getTransInt();
- echo $num-> ;getTransFloat();
코드 복사
|