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

废话不多说直接上代码:

 <?php

 /**
 * 数字金额转换大写数字
 * $num 数字类型
 */

 function inttodaxie($num) {
     //判断$num是否数字
     if(!is_numeric($num)) return -1;
     $dint = array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
     $len = strlen($num);
     $dstr = '';
     for($i = 0; $i <= $len; $i++) {
         $key_ = substr($num, $i, 1);
         $dstr .= $dint[$key_];
     }
     return $dstr;
 }

 $result = inttodaxie(90011234);
 var_dump($result);
 echo '<br>';

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

 <?php

 /**
 * 转换大写金额
 * $num 数字类型
 */

 function inttod($num) {
     //判断$num是否存在
     if(!$num) return '零圆';
     //保留小数点后两位
     $num = round($num, 2);
     //将浮点转换为整数
     $tem_num = $num * 100;
     //判断数字长度
     $tem_num_len = strlen($tem_num);
     if($tem_num_len > 14) {
         return '数字太大了吧,有这么大的金钱吗';
     }

     //大写数字
     $dint = array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
     //大写金额单位
     $danwei = array('仟', '佰', '拾', '亿', '仟', '佰', '拾', '万', '仟', '佰', '拾', '圆');
     $danwei1 = array('角', '分');

     //空的变量用来保存转换字符串
     $daxie = '';

     //分割数字,区分圆角分
     list($left_num, $right_num) = explode('.', $num);

     //计算单位长度
     $danwei_len = count($danwei);
     //计算分割后的字符串长度
     $left_num_len = strlen($left_num);
     $right_num_len = strlen($right_num);

     //循环计算亿万元等
     for($i = 0; $i < $left_num_len; $i++) {
         //循环单个文字
         $key_ = substr($left_num, $i, 1);

         //判断数字不等于0或数字等于0与金额单位为亿、万、圆,就返回完整单位的字符串
         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] == '圆'))) {
             $daxie = $daxie . $dint[$key_] . $danwei[$danwei_len - $left_num_len + $i];
         } else {
             //否则就不含单位
             $daxie = $daxie . $dint[$key_];
         }
     }

     //循环计算角分
     for($i = 0; $i < $right_num_len; $i++) {
         $key_ = substr($right_num, $i, 1);
         if($key_ > 0) {
             $daxie = $daxie . $dint[$key_] . $danwei1[$i];
         }
     }

     //计算转换后的长度
     $daxie_len = strlen($daxie);
     //设置文字切片从0开始,utf-8汉字占3个字符
     $j = 0;
     while($daxie_len > 0) {
         //每次切片两个汉字
         $str = substr($daxie, $j, 6);
         //判断切片后的文字不等于零万、零圆、零亿、零零
         if($str == '零万' || $str == '零圆' || $str == '零亿' || $str == '零零') {
             //重新切片
             $left = substr($daxie, 0, $j);
             $right = substr($daxie, $j + 3);
             $daxie = $left . $right;
         }
         $j += 3;
         $daxie_len -= 3;
     }

     return '人民币' . $daxie . '整';
 }

 $result = inttod(99090909090.19);
 var_dump($result);

运行结果:

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

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

PHP数字金额转换大写金额的更多相关文章

  1. JavaScript将输入的数字金额转换成对应的中文大写金额

    // 将输入的数字金额转换成对应的中文大写金额 // idNumber输入的数字金额,idCHN输出的中文大写金额 function TransformNumberIntoCHN(idNumber, ...

  2. PHP算法--将数字金额转换成大写金额

    最近在看一些PHP算法题,遇到一个将数字金额转换成大写金额的小算法题,这里贴出自己的一个例子. 注:这个小算法适用于10万以内的金额. <?php //$num = 12345.67; func ...

  3. PHP 数字金额转换成中文大写金额的函数 数字转中文

    /** *数字金额转换成中文大写金额的函数 *String Int $num 要转换的小写数字或小写字符串 *return 大写字母 *小数位为两位 **/ function num_to_rmb($ ...

  4. C#小写数字金额转换成大写人民币金额的算法

    C#小写数字金额转换成大写人民币金额的算法 第一种方法: using System.Text.RegularExpressions;//首先引入命名空间 private string DaXie(st ...

  5. JS把数字金额转换成中文大写数字的函数

    //把数字金额转换成中文大写数字的函数 function num2rmb ($num){ $c1="零壹贰叁肆伍陆柒捌玖"; $c2="分角元拾佰仟万拾佰仟亿" ...

  6. c#将输入的人民币数字金额转换成小写

    //// <summary> /// 人民币大小写金额转换 /// </summary> class RMBCapitalization { private const str ...

  7. irport报表,把数字金额转换成大写人民币金额

    1.编写oracle函数 CREATE OR REPLACE Function MoneyToChinese(Money In Number) Return Varchar2 Is strYuan ) ...

  8. java 数字金额转换中文金额

    public static String digitUppercase(double n){ String fraction[] = {"角", "分"}; S ...

  9. c#金额转换成中文大写金额

    2018-08-24 转别人 c#金额转换成中文大写金额 /// <summary> /// 金额转换成中文大写金额 /// </summary> /// <param ...

随机推荐

  1. 介绍对称加密算法,最常用的莫过于DES数据加密算法

    DES DES-Data Encryption Standard,即数据加密算法.是IBM公司于1975年研究成功并公开发表的.DES算法的入口参数有三个:Key.Data.Mode.其中Key为8个 ...

  2. Qt QObject

    [1]Qt的QObject 1.测试代码如下: #include<QApplication> #include<QPushButton> #include<QDebug& ...

  3. BZOJ2061 : Country

    记忆化搜索,设$f[i][j]$表示符号$i$一开始kmp指针为$j$,中间匹配了多少次,$g[i][j]$则表示匹配结束后kmp指针的位置. 时间复杂度$O(nl^2)$. #include< ...

  4. poj: 1004

    简单题 #include <iostream> #include <stdio.h> #include <string.h> #include <stack& ...

  5. 发布Qt Quick桌面应用程序的方法

    这个对话框出现的原因可能是msvcrt.dll在XP这个版本没有vsprintf_s这样的动态库.目前还暂时没有找到好的解决思路,稍后我再单独研究一下,看这个事情该如何解决. 解决办法有很多,我没有一 ...

  6. springboot与thrift集成实现服务端和客户端

    我们这里用一个简单的小功能来演示一下如何使用springboot集成thrift 这个功能是,判断hdfs路径存在. 1.先解决依赖 <dependencies> <dependen ...

  7. Java中四大代码块的执行顺序(附code)

    验证证的方法是写code,如下: public class test { static class A { public static String name = "hello"; ...

  8. android studio gradle 更新方法。

    Android studio更新 第一步:在你所在项目文件夹下:你项目根目录gradlewrapper gradle-wrapper.properties   (只要在打开项目的时候选OK,这个文件就 ...

  9. 题解-拉格朗日(bzoj3695变种)

    Problem 在无穷大的水平面上有一个平面直角坐标系,\(N-1\)条垂直于\(x\)轴的直线将空间分为了\(N\)个区域 你被要求把\((0,0)\)处的箱子匀速推到\((x,y)\) 箱子受水平 ...

  10. 20165206 2017-2018-2《Java程序设计》课程总结

    20165206 2017-2018-2<Java程序设计>课程总结 一.每周作业链接汇总 预备作业1:对师生关系的看法和期望 预备作业2:c语言基础和学习技能的理解 预备作业3:Linu ...