搜尋
首頁後端開發php教程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 == &#39;零元&#39; || $m == &#39;零万&#39; || $m == &#39;零亿&#39; || $m == &#39;零零&#39;) {
            $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) == &#39;零&#39;) {
        $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(&#39;零仟零佰零拾零&#39;,&#39;万万&#39;,&#39;零仟&#39;,&#39;零佰&#39;,&#39;零拾&#39;);
$unit_cn = array("拾","佰","仟","万","亿");
$exp_cn = array("","万","亿");
$max_len = 12;
$len = strlen($num);
if($len > $max_len) {
return &#39;outnumber&#39;;
}
$num = str_pad($num,12,&#39;-&#39;,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 = &#39;&#39;;
foreach($exp_num as $key=>$nums) {
if(array_sum($nums)){
$str = array_shift($exp_cn) . $str;
}
foreach($nums as $nk=>$nv) {
if($nv == &#39;-&#39;){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(&#39;万&#39;,&#39;亿&#39;,&#39;-&#39;),$str);
$str = preg_replace("/-{2,}/","",$str);
$str = str_replace(array(&#39;零&#39;,&#39;-&#39;),array(&#39;&#39;,&#39;零&#39;),$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,&#39;utf-8&#39;);
$num = 0;
$k = &#39;&#39;;
for($i=0;$i<$len;$i++) {
$cn = mb_substr($str,$i,1,&#39;utf-8&#39;);
if($cn == &#39;亿&#39;) {
$num = $num + intval($k)*100000000;
$k = &#39;&#39;;
} elseif($cn == &#39;万&#39;) {
$num = $num + intval($k)*10000;
$k = &#39;&#39;;
} else {
$k = $k . array_search($cn,$convert_cn);
}
}
if($k) {
$num = $num + intval($k);
}    
return $num;                                                            
}                                                                   
echo cn_2_num(&#39;壹仟壹佰壹拾壹亿壹仟壹佰壹拾壹万壹仟壹佰壹拾壹&#39;)."\n";                                 
echo cn_2_num(&#39;拾壹万壹仟壹佰壹拾壹&#39;)."\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+Mysql+jQuery统计当前在线用户数

PHP邮件发送案例

php 文件上传管理系统

以上是php數字金額轉換成中文大寫金額的函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
您如何防止與會議有關的跨站點腳本(XSS)攻擊?您如何防止與會議有關的跨站點腳本(XSS)攻擊?Apr 23, 2025 am 12:16 AM

要保護應用免受與會話相關的XSS攻擊,需採取以下措施:1.設置HttpOnly和Secure標誌保護會話cookie。 2.對所有用戶輸入進行輸出編碼。 3.實施內容安全策略(CSP)限制腳本來源。通過這些策略,可以有效防護會話相關的XSS攻擊,確保用戶數據安全。

您如何優化PHP會話性能?您如何優化PHP會話性能?Apr 23, 2025 am 12:13 AM

优化PHP会话性能的方法包括:1.延迟会话启动,2.使用数据库存储会话,3.压缩会话数据,4.管理会话生命周期,5.实现会话共享。这些策略能显著提升应用在高并发环境下的效率。

什麼是session.gc_maxlifetime配置設置?什麼是session.gc_maxlifetime配置設置?Apr 23, 2025 am 12:10 AM

theSession.gc_maxlifetimesettinginphpdeterminesthelifespanofsessiondata,setInSeconds.1)它'sconfiguredinphp.iniorviaini_set().2)abalanceisesneededeededeedeedeededto toavoidperformance andunununununexpectedLogOgouts.3)

您如何在PHP中配置會話名?您如何在PHP中配置會話名?Apr 23, 2025 am 12:08 AM

在PHP中,可以使用session_name()函數配置會話名稱。具體步驟如下:1.使用session_name()函數設置會話名稱,例如session_name("my_session")。 2.在設置會話名稱後,調用session_start()啟動會話。配置會話名稱可以避免多應用間的會話數據衝突,並增強安全性,但需注意會話名稱的唯一性、安全性、長度和設置時機。

您應該多久再生一次會話ID?您應該多久再生一次會話ID?Apr 23, 2025 am 12:03 AM

會話ID應在登錄時、敏感操作前和每30分鐘定期重新生成。 1.登錄時重新生成會話ID可防會話固定攻擊。 2.敏感操作前重新生成提高安全性。 3.定期重新生成降低長期利用風險,但需權衡用戶體驗。

如何在PHP中設置會話cookie參數?如何在PHP中設置會話cookie參數?Apr 22, 2025 pm 05:33 PM

在PHP中設置會話cookie參數可以通過session_set_cookie_params()函數實現。 1)使用該函數設置參數,如過期時間、路徑、域名、安全標誌等;2)調用session_start()使參數生效;3)根據需求動態調整參數,如用戶登錄狀態;4)注意設置secure和httponly標誌以提升安全性。

在PHP中使用會議的主要目的是什麼?在PHP中使用會議的主要目的是什麼?Apr 22, 2025 pm 05:25 PM

在PHP中使用會話的主要目的是維護用戶在不同頁面之間的狀態。 1)會話通過session_start()函數啟動,創建唯一會話ID並存儲在用戶cookie中。 2)會話數據保存在服務器上,允許在不同請求間傳遞數據,如登錄狀態和購物車內容。

您如何在子域中分享會議?您如何在子域中分享會議?Apr 22, 2025 pm 05:21 PM

如何在子域名間共享會話?通過設置通用域名的會話cookie實現。 1.在服務器端設置會話cookie的域為.example.com。 2.選擇合適的會話存儲方式,如內存、數據庫或分佈式緩存。 3.通過cookie傳遞會話ID,服務器根據ID檢索和更新會話數據。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版