当前位置:Gxlcms > PHP教程 > 阿拉伯数字转中文

阿拉伯数字转中文

时间:2021-07-01 10:21:17 帮助过:46人阅读

好久没写了,最近刚好用到一个财务上的金额由数字转换为中文的内容,写了个函数实现,记录下:

  1. class MoneyConstConfig
  2. {
  3. /**
  4. * 金额数字中文映射
  5. */
  6. public static $NUM_CH_MAP = array(
  7. 0 => '零',
  8. 1 => '壹',
  9. 2 => '贰',
  10. 3 => '叁',
  11. 4 => '肆',
  12. 5 => '伍',
  13. 6 => '陆',
  14. 7 => '柒',
  15. 8 => '捌',
  16. 9 => '玖',
  17. );
  18. /**
  19. * 金额层次中文映射
  20. */
  21. public static $FINANCE_UNIT_MAP = array(
  22. 0 => '分',
  23. 1 => '角',
  24. 2 => '圆',
  25. 3 => '拾',
  26. 4 => '佰',
  27. 5 => '仟',
  28. 6 => '万',
  29. 7 => '拾',
  30. 8 => '佰',
  31. 9 => '仟',
  32. 10 => '亿',
  33. 11 => '拾',
  34. );
  35. }

  1. <!--?php
  2. class MoneyFinanceCommon
  3. {
  4. const MAX_FINANCE_LEN = 10;
  5. const FINANCE_SYMBOL = '¥';
  6. const YUAN_POINT = '圆'; // 这里也写了配置,本来应该是统一的,但是因为这个文本基本不会变化,所以就这样写啦
  7. const WAN_POINT = '万';
  8. const YI_POINT = '亿';
  9. /**
  10. * parseNumToArr 将数字转换位数组
  11. *
  12. * @param double $num
  13. * @static
  14. * @access public
  15. * @return void
  16. */
  17. public static function parseNumToArr($num)
  18. {
  19. return str_split($num);
  20. }
  21. /**
  22. * ticketFinanceChDesc 票据金额中文描述
  23. *
  24. * @param double $sourceNum
  25. * @static
  26. * @access public
  27. * @return array(
  28. * '9' =--> '', // 仟万
  29. * '8' => '', // 佰万
  30. * '7' => '', // 拾万
  31. * '6' => '', // 万
  32. * '5' => '', // 仟
  33. * '4' => '', // 佰
  34. * '3' => '', // 拾
  35. * '2' => '', // 圆
  36. * '1' => '', // 角
  37. * '0' => '', // 分
  38. * );
  39. */
  40. public static function ticketFinanceChDesc($sourceNum) [67/1580]
  41. {
  42. $sourceNum = number_format($sourceNum, 2, '.', ''); // 保证金额是精确到分
  43. $numArr = self::parseNumToArr($sourceNum);
  44. if (false !== ($key = array_search('.', $numArr))) {
  45. unset($numArr[$key]);
  46. }
  47. $rnumArr = array_reverse($numArr);
  48. $data = array();
  49. $i = 0;
  50. foreach ($rnumArr as $num) {
  51. $data[$i++] = $num;
  52. }
  53. if ($i < self::MAX_FINANCE_LEN) {
  54. $data[] = self::FINANCE_SYMBOL;
  55. }
  56. $data = array_pad($data, self::MAX_FINANCE_LEN, ''); // 高位用空字符占位
  57. $result = array_reverse($data);
  58. return $result;
  59. }
  60. [43/1580]
  61. /**
  62. * financeNumToCh
  63. *
  64. * @param double $sourceNum
  65. * @static
  66. * @access public
  67. * @return string $chAmount
  68. */
  69. public static function financeNumToCh($sourceNum)
  70. {
  71. $sourceNum = number_format($sourceNum, 2, '.', ''); // 保证金额是精确到分
  72. $numArr = self::parseNumToArr($sourceNum);
  73. if (false !== ($key = array_search('.', $numArr))) {
  74. unset($numArr[$key]);
  75. }
  76. $amount = array();
  77. $numArrRev = array_reverse($numArr);
  78. $i = 0;
  79. foreach ($numArrRev as $num) {
  80. $amount[$i++] = $num;
  81. }
  82. $amount = array_reverse($amount, true); // 这里再一次反转目的是保证key 的顺序
  83. $chAmount = self::convertNumArrToChStr($amount);
  84. return $chAmount;
  85. }
  86. /** [15/1580]
  87. * convertNumArrToChStr 将数字数组转换位中文数组
  88. *
  89. * @param array $numArr 待转换的数字数组
  90. * @static
  91. * @access public
  92. * @return string $chStr
  93. */
  94. public static function convertNumArrToChStr($numArr)
  95. {
  96. $data = array();
  97. $exists0 = false; // 是否存在0
  98. $chStr = '';
  99. $unitMap = array_flip(MoneyConstConfig::$FINANCE_UNIT_MAP);
  100. $yuan = $unitMap[self::YUAN_POINT];
  101. $wan = $unitMap[self::WAN_POINT];
  102. $yi = $unitMap[self::YI_POINT];
  103. foreach ($numArr as $key => $num) {
  104. if ($num != 0) {
  105. if ($exists0 === true) {
  106. $chStr .= '零';
  107. $exists0 = false;
  108. }
  109. $chStr .= MoneyConstConfig::$NUM_CH_MAP[$num] . MoneyConstConfig::$FINANCE_UNIT_MAP[$key];
  110. } else {
  111. $exists0 = true;
  112. }
  113. if ($key == $yuan) {
  114. $chStr = rtrim($chStr, self::YUAN_POINT);
  115. $chStr .= self::YUAN_POINT;
  116. } elseif ($key == $wan) {
  117. $chStr = rtrim($chStr, self::WAN_POINT);
  118. $chStr .= self::WAN_POINT;
  119. } elseif ($key == $yi) {
  120. $chStr = rtrim($chStr, self::YI_POINT);
  121. $chStr .= self::YI_POINT;
  122. }
  123. }
  124. return $chStr;
  125. }
  126. }

以上就介绍了阿拉伯数字转中文,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

人气教程排行