首页 后端开发 php教程 php数字金额转换成中文大写金额的函数

php数字金额转换成中文大写金额的函数

Jun 08, 2018 pm 05:56 PM
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

热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

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 适用于 Ubuntu 和 Debian 的 PHP 8.4 安装和升级指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 带来了多项新功能、安全性改进和性能改进,同时弃用和删除了大量功能。 本指南介绍了如何在 Ubuntu、Debian 或其衍生版本上安装 PHP 8.4 或升级到 PHP 8.4

我后悔之前不知道的 7 个 PHP 函数 我后悔之前不知道的 7 个 PHP 函数 Nov 13, 2024 am 09:42 AM

如果您是一位经验丰富的 PHP 开发人员,您可能会感觉您已经在那里并且已经完成了。您已经开发了大量的应用程序,调试了数百万行代码,并调整了一堆脚本来实现操作

如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 如何设置 Visual Studio Code (VS Code) 进行 PHP 开发 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也称为 VS Code,是一个免费的源代码编辑器 - 或集成开发环境 (IDE) - 可用于所有主要操作系统。 VS Code 拥有针对多种编程语言的大量扩展,可以轻松编写

在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

您如何在PHP中解析和处理HTML/XML? 您如何在PHP中解析和处理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示了如何使用PHP有效地处理XML文档。 XML(可扩展的标记语言)是一种用于人类可读性和机器解析的多功能文本标记语言。它通常用于数据存储

php程序在字符串中计数元音 php程序在字符串中计数元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符组成的序列,包括字母、数字和符号。本教程将学习如何使用不同的方法在PHP中计算给定字符串中元音的数量。英语中的元音是a、e、i、o、u,它们可以是大写或小写。 什么是元音? 元音是代表特定语音的字母字符。英语中共有五个元音,包括大写和小写: a, e, i, o, u 示例 1 输入:字符串 = "Tutorialspoint" 输出:6 解释 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。总共有 6 个元

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。

什么是PHP魔术方法(__ -construct,__destruct,__call,__get,__ set等)并提供用例? 什么是PHP魔术方法(__ -construct,__destruct,__call,__get,__ set等)并提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些?PHP的魔法方法包括:1.\_\_construct,用于初始化对象;2.\_\_destruct,用于清理资源;3.\_\_call,处理不存在的方法调用;4.\_\_get,实现动态属性访问;5.\_\_set,实现动态属性设置。这些方法在特定情况下自动调用,提升代码的灵活性和效率。

See all articles