ホームページ  >  記事  >  バックエンド開発  >  より完璧なデジタル変換 中国語カテゴリー

より完璧なデジタル変換 中国語カテゴリー

WBOY
WBOYオリジナル
2016-07-25 09:05:55896ブラウズ
最近、中国語へのデジタル変換の問題に頻繁に遭遇するので、それを共有するために投稿を書きました。アドバイスをお願いします。
  1. /*
  2. * func 数値変換中国語クラス
  3. * 著者 shuang
  4. * 日付 2012-08-17
  5. * email:shuangbrother@s​​ina.com
  6. */
  7. class TransFormNumberNew{
  8. public $chinaData = array(' 1'=>'1'、'2'=>'2'、'3'=>'3'、'4'=>'4'、'5'=>'5'、' 6'=>'呂','7'=>'旒','8'=>'捌','9'=>'玖');
  9. public $chinaDataInt = array('1' =>'','2'=>'Shi','3'=>'䰰','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. public function __construct($intnumber,$floatnumber){
  15. $this->gt;Intnumber = $intnumber;
  16. $this->gt;Floatnumber = $floatnumber;
  17. }
  18. public function getTransInt(){
  19. /*数値が 0 または数字以外の場合、エラー メッセージを返します*/
  20. if($this->Intnumber == 0){
  21. return $this->error Notice( 'def');
  22. }
  23. if(!preg_match('/^d+$/',$this->Intnumber)){
  24. return $this->error Notice('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. public function getTransFloat(){
  34. return $this->setTransFloat($this->gt;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){
  50. /*文字列が 4 桁足りない場合は、0 で埋めます*/
  51. $val = str_pad($val, 4, "0", STR_PAD_RIGHT);
  52. }
  53. for($ i=0;$i<$j;$i++){
  54. /* 4 つの文字列ごとにループします。文字列が 0 の場合は、その前の桁が 0 であるかどうかを確認します。0 の場合は処理しません。それ。 0 ではなく、「ゼロ」を使用して埋めます */
  55. if($val{$i} == 0){
  56. if($val{$i-1}){
  57. $newArray[$key][] = ' zero';
  58. }
  59. }else{
  60. $newArray[$key][] = $this->chinaData[$val{$i}].$this->chinaDataInt[$i+1];
  61. }
  62. }
  63. }
  64. unset($data,$key,$val);
  65. /*上記のループでは、中国語に変換された配列を既に取得しています。これを以下に整理します*/
  66. foreach(array_reverse($newArray,true) ) as $key=>$val){
  67. if($key == 0){
  68. $str .= implode('',array_reverse($val));
  69. }
  70. if($key%2 == 1 ){
  71. $j = Floor($key/2);
  72. if($j == 0){
  73. $str .= implode('',array_reverse($val)).'万';
  74. }else{
  75. $str .= implode('',array_reverse($val)).'万'.str_pad('',3*$j,'Billion');
  76. }
  77. }
  78. if($key%2 == 0 && $key != 0){
  79. if($key/2 > 1){
  80. $str .= implode('',array_reverse($val)).'万万'.str_pad('',3*(floor ($ key/2)-1),'Billion');
  81. }else{
  82. $str .= implode('',array_reverse($val)).'Billion';
  83. }
  84. }
  85. }
  86. unset($ newArray, $key,$val,$j);
  87. return $str;
  88. }
  89. //小数点以下 2 桁を厳密にサポート
  90. プライベート関数 setTransFloat($floatData,$pos){
  91. if($pos > 2){
  92. return $ this->error Notice('def');
  93. }
  94. if($floatData{0} == 0){
  95. $data[] = 'zero';
  96. }else{
  97. $data[] = $this ->chinaData[$floatData{0}].$this->chinaDataFloat[1];
  98. }
  99. if($floatData!= 0 ){
  100. $data[] = $this->chinaData[$floatData Inフラッシュ].$this->chinaDataFloat[2];
  101. }
  102. return implode('',$data);
  103. }
  104. public function error Notice($error){
  105. return $this->error[$error ] ;}}
  106. }
  107. $ num = 新しい Transformnumbernew ('450252352007760006601000300', '80') ; コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。