• PHP数字金额转换大写金额


    早些年做CRM用到的一个金额转换函数,今天从旧项目中拿出来记录一下。金额转换的函数方法有很多,都很不错。不过这个是小崔刚工作的时候写的一个转换函数,多少还是有点纪念意义。如有问题请朋友们指出,小崔及时修正。谢谢啦!

    废话不多说直接上代码:

     1 <?php
     2 
     3 /**
     4 * 数字金额转换大写数字
     5 * $num 数字类型
     6 */
     7 
     8 function inttodaxie($num) {
     9     //判断$num是否数字
    10     if(!is_numeric($num)) return -1;
    11     $dint = array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
    12     $len = strlen($num);
    13     $dstr = '';
    14     for($i = 0; $i <= $len; $i++) {
    15         $key_ = substr($num, $i, 1);
    16         $dstr .= $dint[$key_];
    17     }
    18     return $dstr;
    19 }
    20 
    21 $result = inttodaxie(90011234);
    22 var_dump($result);
    23 echo '<br>';

    以上是基础转换代码,在这个基础上进行二次改造:

     1 <?php
     2 
     3 /**
     4 * 转换大写金额
     5 * $num 数字类型
     6 */
     7 
     8 function inttod($num) {
     9     //判断$num是否存在
    10     if(!$num) return '零圆';
    11     //保留小数点后两位
    12     $num = round($num, 2);
    13     //将浮点转换为整数
    14     $tem_num = $num * 100;
    15     //判断数字长度
    16     $tem_num_len = strlen($tem_num);
    17     if($tem_num_len > 14) {
    18         return '数字太大了吧,有这么大的金钱吗';
    19     }
    20 
    21     //大写数字
    22     $dint = array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
    23     //大写金额单位
    24     $danwei = array('仟', '佰', '拾', '亿', '仟', '佰', '拾', '万', '仟', '佰', '拾', '圆');
    25     $danwei1 = array('角', '分');
    26 
    27     //空的变量用来保存转换字符串
    28     $daxie = '';
    29 
    30     //分割数字,区分圆角分
    31     list($left_num, $right_num) = explode('.', $num);
    32 
    33     //计算单位长度
    34     $danwei_len = count($danwei);
    35     //计算分割后的字符串长度
    36     $left_num_len = strlen($left_num);
    37     $right_num_len = strlen($right_num);
    38 
    39     //循环计算亿万元等
    40     for($i = 0; $i < $left_num_len; $i++) {
    41         //循环单个文字
    42         $key_ = substr($left_num, $i, 1);
    43 
    44         //判断数字不等于0或数字等于0与金额单位为亿、万、圆,就返回完整单位的字符串
    45         if($key_ !== '0' || ($key_ == '0' && ($danwei[$danwei_len - $left_num_len + $i] == '亿' || $danwei[$danwei_len - $left_num_len + $i] == '万' || $danwei[$danwei_len - $left_num_len + $i] == '圆'))) {
    46             $daxie = $daxie . $dint[$key_] . $danwei[$danwei_len - $left_num_len + $i];
    47         } else {
    48             //否则就不含单位
    49             $daxie = $daxie . $dint[$key_];
    50         }
    51     }
    52 
    53     //循环计算角分
    54     for($i = 0; $i < $right_num_len; $i++) {
    55         $key_ = substr($right_num, $i, 1);
    56         if($key_ > 0) {
    57             $daxie = $daxie . $dint[$key_] . $danwei1[$i];
    58         }
    59     }
    60 
    61     //计算转换后的长度
    62     $daxie_len = strlen($daxie);
    63     //设置文字切片从0开始,utf-8汉字占3个字符
    64     $j = 0;
    65     while($daxie_len > 0) {
    66         //每次切片两个汉字
    67         $str = substr($daxie, $j, 6);
    68         //判断切片后的文字不等于零万、零圆、零亿、零零
    69         if($str == '零万' || $str == '零圆' || $str == '零亿' || $str == '零零') {
    70             //重新切片
    71             $left = substr($daxie, 0, $j);
    72             $right = substr($daxie, $j + 3);
    73             $daxie = $left . $right;
    74         }
    75         $j += 3;
    76         $daxie_len -= 3;
    77     }
    78     
    79     return '人民币' . $daxie . '整';
    80 }
    81 
    82 $result = inttod(99090909090.19);
    83 var_dump($result);

    运行结果:

    PHP数字金额转换大写金额

    源代码已上传GitHub:https://github.com/cuiyuanxin/php-demo/blob/master/capital.php

    纯手打笔记,如有错误请评论提出,谢谢。

  • 相关阅读:
    面向对象
    linux下apache重启报错
    mysql登录密码忘记怎么办?
    html基础知识梳理
    用js实现贪吃蛇
    简单轮播图案例
    JavaScript基础学习笔记整理
    读书笔记之《Redis开发与运维》—— 三
    读书笔记之《Redis开发与运维》—— 二
    读书笔记之《Redis开发与运维》—— 一
  • 原文地址:https://www.cnblogs.com/cuiyuanxin/p/10459532.html
Copyright © 2020-2023  润新知