디지털 금액을 중국 자본 금액으로 변환하는 PHP 기능
本篇文章主要介绍php数字金额转换成中文大写金额的函数,感兴趣的朋友参考下,希望对大家有所帮助。
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); //贰仟叁佰万元整
代码三:
<?php //先贴一个数字转中文的,最多12位数 function convert_2_cn($num) { $convert_cn = array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖"); $repair_number = array('零仟零佰零拾零','万万','零仟','零佰','零拾'); $unit_cn = array("拾","佰","仟","万","亿"); $exp_cn = array("","万","亿"); $max_len = 12; $len = strlen($num); if($len > $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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu
