>  기사  >  백엔드 개발  >  더욱 완벽한 디지털 전환 중국어 카테고리

더욱 완벽한 디지털 전환 중국어 카테고리

WBOY
WBOY원래의
2016-07-25 09:05:55932검색
최근 디지털 중국어로 변환하는 문제가 계속 발생해서 공유하고자 글을 작성하게 되었습니다. 조언을 부탁드립니다.
  1. /*
  2. * func 디지털 전환 중국어 수업
  3. * 저자 shuang
  4. * 날짜 2012-08-17
  5. * 이메일:shuangbrother@sina.com
  6. */
  7. class TransFormNumberNew{
  8. public $chinaData = array('1'=>'壹','2'=>'이','3'=>' 삼','4'=>'사','5'=>'오','6'=>'루','7'=>'旒','8'=>'捌','9'=>'玖');
  9. public $chinaDataInt = array('1'=>'','2'=>'Shi','3'=>'Hundred ','4'=>'仟');
  10. public $chinaDataFloat = array('1'=>'angle','2'=>'fen');
  11. private $Intnumber; // string
  12. private $Floatnumber; // string
  13. public $error = array('0'=>'zero','def'=>'지원되지 않는 데이터 형식');
  14. 공개 함수 __construct($intnumber,$floatnumber){
  15. $this->Intnumber = $intnumber;
  16. $this->Floatnumber = $floatnumber;
  17. }
  18. 공개 함수 getTransInt( ){
  19. /*숫자가 0이거나 숫자가 아닌 문자인 경우 오류 메시지를 반환합니다.*/
  20. if($this->Intnumber == 0){
  21. return $this-> errorNotice('def' );
  22. }
  23. if(!preg_match('/^d $/',$this->Intnumber)){
  24. return $this->errorNotice('def' );
  25. }
  26. /*문자열에서 0으로 시작하는 문자 제거*/
  27. $this->dealIntZero();
  28. $data = array();
  29. / *문자열을 4개의 그룹으로 분할*/
  30. $data = str_split(strrev($this->Intnumber),4);
  31. return $this->setTransInt($data);
  32. }
  33. 공개 함수 getTransFloat(){
  34. return $this->setTransFloat($this->Floatnumber,strlen($this->Floatnumber));
  35. }
  36. 비공개 함수 dealIntZero() {
  37. $j = strlen($this->Intnumber);
  38. for($i=0;$i<$j;$i ){
  39. if($this->Intnumber{$ i} != 0){
  40. $this->Intnumber = substr($this->Intnumber,$i,$j);
  41. break;
  42. }
  43. }
  44. }
  45. 비공개 함수 setTransInt($data){
  46. $str = '';
  47. $newArray = array();
  48. while(list($key,$val) = Each($data)) {
  49. $j = strlen($val);
  50. if($j < 4){
  51. /*문자열이 4자리로 충분하지 않으면 0으로 채웁니다*/
  52. $ val = str_pad($val , 4, "0", STR_PAD_RIGHT);
  53. }
  54. for($i=0;$i<$j;$i ){
  55. /*4개의 문자열마다 반복 ; if string 0이면 이전 비트가 0인지 확인하고, 0이면 처리하지 않습니다. 0이 아니라 "0"을 사용하여 채웁니다. */
  56. if($val{$i} == 0){
  57. if($val{$i-1}){
  58. $newArray[$ key][] = 'zero';
  59. }
  60. }else{
  61. $newArray[$key][] = $this->chinaData[$val{$i}].$this-> ;chinaDataInt[$i 1];
  62. }
  63. }
  64. }
  65. unset($data,$key,$val);
  66. /*위 루프를 중국어 배열로 변환했습니다. 아래에 정리할 수 있습니다. */
  67. foreach(array_reverse($newArray,true) as $key=>$val){
  68. if($key == 0){
  69. $str . '',array_reverse($val));
  70. }
  71. if($key%2 == 1){
  72. $j = Floor($key/2);
  73. if( $j = = 0){
  74. $str .= implode('',array_reverse($val)).'万';
  75. }else{
  76. $str .= implode('',array_reverse( $val) ).'万'.str_pad('',3*$j,'Billion');
  77. }
  78. }
  79. if($key%2 == 0 && $key != 0 ){
  80. if($key/2 > 1){
  81. $str .= implode('',array_reverse($val)).'万万'.str_pad('',3*(floor( $key/ 2)-1),'1억');
  82. }else{
  83. $str .= implode('',array_reverse($val)).'1억';
  84. }
  85. }
  86. }
  87. unset($newArray,$key,$val,$j);
  88. return $str;
  89. }
  90. //소수점 두 자리를 엄격하게 지원합니다
  91. 비공개 함수 setTransFloat( $floatData,$pos){
  92. if($pos > 2){
  93. return $this->errorNotice('def');
  94. }
  95. if($floatData{0} = = 0){
  96. $data[] = 'zero';
  97. }else{
  98. $data[] = $this->chinaData[$floatData{0}].$this-> [1];
  99. }
  100. if($floatData!= 0 ){
  101. $data[] = $this->chinaData[$floatData].$this-> ;chinaDataFloat[2];
  102. }
  103. return implode('',$data);
  104. }
  105. 공개 함수 errorNotice($error){
  106. return $this->error[$ error];
  107. }
  108. }
  109. $num = new TransFormNumberNew('450252352007760006601000300','80');
  110. echo $num->getTransInt();
  111. echo $num-> ;getTransFloat();
코드 복사


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.