>백엔드 개발 >PHP 튜토리얼 >더욱 완벽한 디지털 전환 중국어 카테고리

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-07-25 09:05:551050검색
최근 디지털 중국어로 변환하는 문제가 계속 발생해서 공유하고자 글을 작성하게 되었습니다. 조언을 부탁드립니다.
  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 if($this->Intnumber{$ i} != 0){
  39. $this->Intnumber = substr($this->Intnumber,$i,$j);
  40. break;
  41. }
  42. }
  43. }
  44. 비공개 함수 setTransInt($data){
  45. $str = '';
  46. $newArray = array();
  47. while(list($key,$val) = Each($data)) {
  48. $j = strlen($val);
  49. if($j /*문자열이 4자리로 충분하지 않으면 0으로 채웁니다*/
  50. $ val = str_pad($val , 4, "0", STR_PAD_RIGHT);
  51. }
  52. for($i=0;$i /*4개의 문자열마다 반복 ; if string 0이면 이전 비트가 0인지 확인하고, 0이면 처리하지 않습니다. 0이 아니라 "0"을 사용하여 채웁니다. */
  53. if($val{$i} == 0){
  54. if($val{$i-1}){
  55. $newArray[$ key][] = 'zero';
  56. }
  57. }else{
  58. $newArray[$key][] = $this->chinaData[$val{$i}].$this-> ;chinaDataInt[$i 1];
  59. }
  60. }
  61. }
  62. unset($data,$key,$val);
  63. /*위 루프를 중국어 배열로 변환했습니다. 아래에 정리할 수 있습니다. */
  64. foreach(array_reverse($newArray,true) as $key=>$val){
  65. if($key == 0){
  66. $str . '',array_reverse($val));
  67. }
  68. if($key%2 == 1){
  69. $j = Floor($key/2);
  70. if( $j = = 0){
  71. $str .= implode('',array_reverse($val)).'万';
  72. }else{
  73. $str .= implode('',array_reverse( $val) ).'万'.str_pad('',3*$j,'Billion');
  74. }
  75. }
  76. if($key%2 == 0 && $key != 0 ){
  77. if($key/2 > 1){
  78. $str .= implode('',array_reverse($val)).'万万'.str_pad('',3*(floor( $key/ 2)-1),'1억');
  79. }else{
  80. $str .= implode('',array_reverse($val)).'1억';
  81. }
  82. }
  83. }
  84. unset($newArray,$key,$val,$j);
  85. return $str;
  86. }
  87. //소수점 두 자리를 엄격하게 지원합니다
  88. 비공개 함수 setTransFloat( $floatData,$pos){
  89. if($pos > 2){
  90. return $this->errorNotice('def');
  91. }
  92. if($floatData{0} = = 0){
  93. $data[] = 'zero';
  94. }else{
  95. $data[] = $this->chinaData[$floatData{0}].$this-> [1];
  96. }
  97. if($floatData!= 0 ){
  98. $data[] = $this->chinaData[$floatData].$this-> ;chinaDataFloat[2];
  99. }
  100. return implode('',$data);
  101. }
  102. 공개 함수 errorNotice($error){
  103. return $this->error[$ error];
  104. }
  105. }
  106. $num = new TransFormNumberNew('450252352007760006601000300','80');
  107. echo $num->getTransInt();
  108. echo $num-> ;getTransFloat();
코드 복사


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