php将数字金额转成中文表达

思路

  • 先将角与元分隔成二个数组, A(万,千,百), B(角,分)数组
  • 将A数组反转过来, 从小到大的顺序, 方便转换,装载到一个数组里
  • 保证新的数组是从小到大的顺序.
  • 对B数组进行压栈操作.使用array_unshift
  • 然后将数组反转过来, 拼接成字符串.

代码实现

function ToChinaMoney($money) {
   $money = round($money, 2);//只保留2位小数
     //定义对应的中文表达数组
     $china_number = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'];
     $china_units = ['角','分'];
     $china_great = ['圆', '拾','佰','仟','万','拾','佰','仟','亿'];
     list($max, $min) = explode('.', $money);//小数点分隔
     $max_str = str_split($max);//将数字转换成数组,方便转换
     $min_str = str_split($min);
     $result = [];
     //需要将大金额反转一下
     foreach (array_reverse($max_str) as $key => $val) {
         $result[] = $china_number[$val] . $china_great[$key];//转换对应的中文表达
     }
     foreach ($min_str as $key => $val) {
         //每次添加天数组的头部,按从小到大的顺序
         array_unshift($result, $china_number[$val] . $china_units[$key]);//转换对应的中文表达
     }
     $result = array_reverse($result);//将从小到大的反转成从大到小的顺序
     return implode('', $result);//将数组转转换成字符串表达
 }

测试

如果按照人的正常思维读取还有待优化程序.

$num = 31230.03;
echo ToChinaMoney($num);//叁万壹仟贰佰叁拾零圆零角叁分
$num = 10.3;
echo ToChinaMoney($num);//壹拾零圆叁角
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值