侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

php将金额数字转化为中文大写

php  /  管理员 发布于 7年前   129

php将金额数字转化为中文大写

echo toChineseNumber(1234567890);//壹拾贰亿叁仟肆佰伍拾陆万柒仟捌佰玖拾圆function toChineseNumber($money){  $money = round($money,2);  $cnynums = array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");   $cnyunits = array("圆","角","分");  $cnygrees = array("拾","佰","仟","万","拾","佰","仟","亿");   list($int,$dec) = explode(".",$money,2);  $dec = array_filter(array($dec[1],$dec[0]));   $ret = array_merge($dec,array(implode("",cnyMapUnit(str_split($int),$cnygrees)),""));   $ret = implode("",array_reverse(cnyMapUnit($ret,$cnyunits)));   return str_replace(array_keys($cnynums),$cnynums,$ret); }function cnyMapUnit($list,$units) {   $ul=count($units);   $xs=array();   foreach (array_reverse($list) as $x) {     $l=count($xs);     if ($x!="0" || !($l%4))       $n=($x=='0'?'':$x).($units[($l-1)%$ul]);     else $n=is_numeric($xs[0][0])?$x:'';  array_unshift($xs,$n);  }  return $xs;  }

代码二:

/***数字金额转换成中文大写金额的函数*String Int $num 要转换的小写数字或小写字符串*return 大写字母*小数位为两位**/function num_to_rmb($num){    $c1 = "零壹贰叁肆伍陆柒捌玖";    $c2 = "分角元拾佰仟万拾佰仟亿";    //精确到分后面就不要了,所以只留两个小数位    $num = round($num, 2);     //将数字转化为整数    $num = $num * 100;    if (strlen($num) > 10) {        return "金额太大,请检查";    }     $i = 0;    $c = "";    while (1) {        if ($i == 0) {//获取最后一位数字$n = substr($num, strlen($num)-1, 1);        } else {$n = $num % 10;        }        //每次将最后一位数字转化为中文        $p1 = substr($c1, 3 * $n, 3);        $p2 = substr($c2, 3 * $i, 3);        if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) {$c = $p1 . $p2 . $c;        } else {$c = $p1 . $c;        }        $i = $i + 1;        //去掉数字最后一位了        $num = $num / 10;        $num = (int)$num;        //结束循环        if ($num == 0) {break;        }     }    $j = 0;    $slen = strlen($c);    while ($j < $slen) {        //utf8一个汉字相当3个字符        $m = substr($c, $j, 6);        //处理数字中很多0的情况,每次循环去掉一个汉字“零”        if ($m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零') {$left = substr($c, 0, $j);$right = substr($c, $j + 3);$c = $left . $right;$j = $j-3;$slen = $slen-3;        }         $j = $j + 3;    }     //这个是为了去掉类似23.0中最后一个“零”字    if (substr($c, strlen($c)-3, 3) == '零') {        $c = substr($c, 0, strlen($c)-3);    }    //将处理的汉字加上“整”    if (empty($c)) {        return "零元整";    }else{        return $c . "整";    }}echo num_to_rmb(23000000.00); //贰仟叁佰万元整

代码三:

 $max_len) {return 'outnumber';}$num = str_pad($num,12,'-',STR_PAD_LEFT);$exp_num = array();$k = 0;for($i=12;$i>0;$i--){if($i%4 == 0) {$k++;}$exp_num[$k][] = substr($num,$i-1,1);}$str = '';foreach($exp_num as $key=>$nums) {if(array_sum($nums)){$str = array_shift($exp_cn) . $str;}foreach($nums as $nk=>$nv) {if($nv == '-'){continue;}if($nk == 0) {$str = $convert_cn[$nv] . $str;} else {$str = $convert_cn[$nv].$unit_cn[$nk-1] . $str;}}}$str = str_replace($repair_number,array('万','亿','-'),$str);$str = preg_replace("/-{2,}/","",$str);$str = str_replace(array('零','-'),array('','零'),$str);return $str;}echo convert_2_cn(1111)."\n";echo convert_2_cn(111111)."\n";echo convert_2_cn(111111111111)."\n";//补充一个中文转数字的function cn_2_num($str){$convert_cn = array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");$skip_words = array("拾","佰","仟");$str = str_replace($skip_words,"",$str);$len = mb_strlen($str,'utf-8');$num = 0;$k = '';for($i=0;$i<$len;$i++) {$cn = mb_substr($str,$i,1,'utf-8');if($cn == '亿') {$num = $num + intval($k)*100000000;$k = '';} elseif($cn == '万') {$num = $num + intval($k)*10000;$k = '';} else {$k = $k . array_search($cn,$convert_cn);}}if($k) {$num = $num + intval($k);}    return $num;}       echo cn_2_num('壹仟壹佰壹拾壹亿壹仟壹佰壹拾壹万壹仟壹佰壹拾壹')."\n";         echo cn_2_num('拾壹万壹仟壹佰壹拾壹')."\n";  ?>

代码四:

function convertCurrency(currencyDigits) {// Constants:var MAXIMUM_NUMBER = 99999999999.99;// Predefine the radix characters and currency symbols for output:var CN_ZERO = "零";var CN_ONE = "壹";var CN_TWO = "贰";var CN_THREE = "叁";var CN_FOUR = "肆";var CN_FIVE = "伍";var CN_SIX = "陆";var CN_SEVEN = "柒";var CN_EIGHT = "捌";var CN_NINE = "玖";var CN_TEN = "拾";var CN_HUNDRED = "佰";var CN_THOUSAND = "仟";var CN_TEN_THOUSAND = "万";var CN_HUNDRED_MILLION = "亿";var CN_SYMBOL = "人民币";var CN_DOLLAR = "元";var CN_TEN_CENT = "角";var CN_CENT = "分";var CN_INTEGER = "整";// Variables:var integral; // Represent integral part of digit number. var decimal; // Represent decimal part of digit number.var outputCharacters; // The output result.var parts;var digits, radices, bigRadices, decimals;var zeroCount;var i, p, d;var quotient, modulus;// Validate input string:currencyDigits = currencyDigits.toString();if (currencyDigits == "") { alert("Empty input!"); return "";}if (currencyDigits.match(/[^,.\d]/) != null) { alert("Invalid characters in the input string!"); return "";}if ((currencyDigits).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) == null) { alert("Illegal format of digit number!"); return "";}// Normalize the format of input digits:currencyDigits = currencyDigits.replace(/,/g, ""); // Remove comma delimiters.currencyDigits = currencyDigits.replace(/^0+/, ""); // Trim zeros at the beginning. // Assert the number is not greater than the maximum number.if (Number(currencyDigits) > MAXIMUM_NUMBER) { alert("Too large a number to convert!"); return "";}// http://www.knowsky.com/ Process the coversion from currency digits to characters:// Separate integral and decimal parts before processing coversion:parts = currencyDigits.split(".");if (parts.length > 1) { integral = parts[0]; decimal = parts[1]; // Cut down redundant decimal digits that are after the second. decimal = decimal.substr(0, 2);}else { integral = parts[0]; decimal = "";}// Prepare the characters corresponding to the digits:digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT,CN_NINE);radices = new Array("", CN_TEN, CN_HUNDRED, CN_THOUSAND);bigRadices = new Array("", CN_TEN_THOUSAND, CN_HUNDRED_MILLION);decimals = new Array(CN_TEN_CENT, CN_CENT);// Start processing:outputCharacters = "";// Process integral part if it is larger than 0:if (Number(integral) > 0) { zeroCount = 0; for (i = 0; i < integral.length; i++) {  p = integral.length - i - 1;  d = integral.substr(i, 1);  quotient = p / 4;  modulus = p % 4;  if (d == "0") {  zeroCount++;  }  else {  if (zeroCount > 0)  {   outputCharacters += digits[0];  }  zeroCount = 0;  outputCharacters += digits[Number(d)] + radices[modulus];  }  if (modulus == 0 && zeroCount < 4) {   outputCharacters += bigRadices[quotient];  } } outputCharacters += CN_DOLLAR;}// Process decimal part if there is:if (decimal != "") { for (i = 0; i < decimal.length; i++) {  d = decimal.substr(i, 1);  if (d != "0") {  outputCharacters += digits[Number(d)] + decimals[i];  } }}// Confirm and return the final output string:if (outputCharacters == "") { outputCharacters = CN_ZERO + CN_DOLLAR;}if (decimal == "") { outputCharacters += CN_INTEGER;}//outputCharacters = CN_SYMBOL + outputCharacters;outputCharacters = outputCharacters;return outputCharacters;}// var stmp = "";function nst_convert(t){  if(t.value==stmp) return;//如果等于上次输入则返回  var ms = t.value.replace(/[^\d\.]/g,"").replace(/(\.\d{2}).+$/,"$1").replace(/^0+([1-9])/,"$1").replace(/^0+$/,"0");  //replace(/[^\d\.]/g,"")去掉输入当中不是数字和.的字符  //replace(/(\.\d{2}).+$/,"$1")   //匹配从字符开始的第一个.后面的所有字符,由于没有使用g标记,  //所以只匹配开始第一次  然后用小数点和后两位进行替换以确定数值最后的格式正确 高.  //replace(/^0+([1-9])/,"$1") 匹配以多个0开头的数值替换为去掉0后的数值做为数字的第一位 也是匹配开始的一次.  //replace(/^0+$/,"0") 匹配以0开始和结束的多个0为一个0 也就是0000000 输入->转换成一个0  //以下确定输入的为过滤后的合法数字  //alert(ms);  var txt = ms.split(".");  //alert(txt[0]);  //如果ms值不小数点存在则txt[0]=小数点前的值否则等于ms  //regexp:/\d{4}(,|$)/ 匹配四位数字和,的集合或者四位数字和字符结尾的集合  while(/\d{4}(,|$)/.test(txt[0]))//如果为txt[0]=4123   txt[0] = txt[0].replace(/(\d)(\d{3}(,|$))/,"$1,$2");  //txt[0].replace(/(\d)(\d{3}(,|$))/,"$1,$2")是将txt[0]进行替换后再赋给它  //regexp:/(\d)(\d{3}(,|$))/ 将四个数字份为两组第一个数字为第一位,后三位和其他结尾为每二位  //并替换成 第一位,第二位 注意 ,的使用很好.  也就是将4123先替换成4,123  //由于此表达式默认采用贪婪匹配所以从数值后向前匹配再通过循环进行再匹配替换从而可以将  //12345678分成你想要的123,456,78 彩用(,|$)很精典,因为它略去了第二次匹配时的,问题  t.value = stmp = txt[0]+(txt.length>1?"."+txt[1]:"");  //最终赋值到输入框中   //如果有小数点则加上并购成最终数字否则显示替换后的txt[0]  bbb.value = convertCurrency(ms-0);  //将ms转换为数字送到number2num1去转换}

以上所述就是本文的全部内容了,希望大家能够喜欢。

您可能感兴趣的文章:

  • 编写PHP程序检查字符串中的中文字符个数的实例分享
  • php阿拉伯数字转中文人民币大写
  • php封装好的人民币数值转中文大写类
  • php实现过滤字符串中的中文和数字实例
  • php支持中文字符串分割的函数
  • php的GD库imagettftext函数解决中文乱码问题
  • 多个PHP中文字符串截取函数
  • PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
  • php中计算中文字符串长度、截取中文字符串的函数代码
  • php简单统计在线人数的方法
  • PHP使用redis实现统计缓存mysql压力的方法
  • php精确的统计在线人数的方法
  • php简单统计中文个数的方法


  • 上一条:
    PHP实现全角字符转为半角方法汇总
    下一条:
    php实现的简易扫雷游戏实例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客