찾다
php教程PHP源码php把金钱数字转为大写的函数

我们常用做商城时会希望把用户输入的数字转换在RMB大写形式了,下面我整理了几个可以处理万亿级的数字转换例子,大家一起来看看这些例子吧。

<script>ec(2);</script>

例子1

 代码如下 复制代码

function change_num($num)
 {
 $d = array('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
 $e = array('元','拾','佰','仟','万','拾万','佰万','仟万','亿','拾亿','佰亿','仟亿','万亿');
 $p = array('分','角');
 $zheng='整'; //追加"整"字
 $final = array(); //结果
 $inwan=0; //是否有万
 $inyi=0; //是否有亿
 $len_pointdigit=0; //小数点后长度
 $y=0;
 if($c = strpos($num, '.')) //有小数点,$c为小数点前有几位数
 {
 $len_pointdigit = strlen($num)-strpos($num, '.')-1; // 判断小数点后有几位数
 if($c>13) //简单的错误处理
 {
 echo "数额太大,已经超出万亿.";
 die();
 }
 elseif($len_pointdigit>2) //$len_pointdigit小数点后有几位
 {
 echo "小数点后只支持2位.";
 die();
 }
 }
 else //无小数点
 {
 $c = strlen($num);
 $zheng = '整';
 }
 for($i=0;$i  {
 $bit_num = substr($num, $i, 1); //逐字读取 左->右
 if($bit_num!=0 || substr($num, $i+1, 1)!=0) //当前是零 下一位还是零的话 就不显示
 @$low2chinses = $low2chinses.$d[$bit_num];
 if($bit_num || $i==$c-1)
 @$low2chinses = $low2chinses.$e[$c-$i-1];
 }
 for($j=$len_pointdigit; $j>=1; $j--) //处理小数部分
 {
 $point_num = substr($num, strlen($num)-$j, 1); //逐字读取 左->右
 if($point_num != 0)
 @$low2chinses = $low2chinses.$d[$point_num].$p[$j-1];
 //if(substr($num, strlen($num)-2, 1)==0 && substr($num, strlen($num)-1, 1)==0) //小数点后两位都是0
 }
 $chinses = str_split($low2chinses,2); //字符串转换成数组
 //print_r($chinses);
 for($x=sizeof($chinses)-1;$x>=0;$x--) //过滤无效的信息
 {
 if($inwan==0&&$chinses[$x]==$e[4]) //过滤重复的"万"
 {
 $final[$y++] = $chinses[$x];
 $inwan=1;
 }
 if($inyi==0&&$chinses[$x]==$e[8]) //过滤重复的"亿"
 {
 $final[$y++] = $chinses[$x];
 $inyi=1;
 $inwan=0;
 }
 if($chinses[$x]!=$e[4]&&$chinses[$x]!=$e[8]) //进行整理,将最后的值赋予$final数组
 $final[$y++] = $chinses[$x];
 }
 $newstring=(array_reverse($final)); //$final为倒数组,$newstring为正常可以使用的数组
 $nstring=join($newstring); //数组变成字符串
 if(substr($num,-2,1)==0 && substr($num,-1)0) //判断原金额角位为0 ? 分位不为0 ?
 {
 $nstring=substr($nstring,0,(strlen($nstring)-4))."零".substr($nstring,-4,4); //这样加一个零字
 }
 $fen="分";
 $fj=substr_count($nstring, $fen); //如果没有查到分这个字
 return $nstring=($fj==0)?$nstring.$zheng:$nstring; //就将"整"加到后面
 }


例子2

 1.支持天文数字,整数位理论上可以无限的长;
    2.支持小数,对于货币,一般精确到小数后两位,可以设置小数位是否四舍五入;
    3.支持自定义货币单位,有的系统要求大写是"圆",有的要求是"元",可以自定义;
    4.支持整数以0结束并含有小数的数字自定义末尾补"零",比如有的系统要求1960.30这样的数字转大写之后是"壹仟玖佰陆拾元叁角",而有的系统则要求"壹仟玖佰陆拾元零叁角",这两种情况按"正确填写票据和结算凭证的基本规定"都是正确的,现在可已自定义。

 

 代码如下 复制代码

      /**
     * 人民币小写转大写
     *
     * @param string $number 数值
     * @param string $int_unit 币种单位,默认"元",有的需求可能为"圆"
     * @param bool $is_round 是否对小数进行四舍五入
     * @param bool $is_extra_zero 是否对整数部分以0结尾,小数存在的数字附加0,比如1960.30,
     *             有的系统要求输出"壹仟玖佰陆拾元零叁角",实际上"壹仟玖佰陆拾元叁角"也是对的
     * @return string
     * @site www.111cn.net     */
    function num2rmb($number = 0, $int_unit = '元', $is_round = TRUE, $is_extra_zero = FALSE)
    {
        // 将数字切分成两段
        $parts = explode('.', $number, 2);
        $int = isset($parts[0]) ? strval($parts[0]) : '0';
        $dec = isset($parts[1]) ? strval($parts[1]) : '';

        // 如果小数点后多于2位,不四舍五入就直接截,否则就处理
        $dec_len = strlen($dec);
        if (isset($parts[1]) && $dec_len > 2)
        {
            $dec = $is_round
                    ? substr(strrchr(strval(round(floatval("0.".$dec), 2)), '.'), 1)
                    : substr($parts[1], 0, 2);
        }

        // 当number为0.001时,小数点后的金额为0元
        if(empty($int) && empty($dec))
        {
            return '零';
        }

        // 定义
        $chs = array('0','壹','贰','叁','肆','伍','陆','柒','捌','玖');
        $uni = array('','拾','佰','仟');
        $dec_uni = array('角', '分');
        $exp = array('', '万');
        $res = '';

        // 整数部分从右向左找
        for($i = strlen($int) - 1, $k = 0; $i >= 0; $k++)
        {
            $str = '';
            // 按照中文读写习惯,每4个字为一段进行转化,i一直在减
            for($j = 0; $j = 0; $j++, $i--)
            {
                $u = $int{$i} > 0 ? $uni[$j] : ''; // 非0的数字后面添加单位
                $str = $chs[$int{$i}] . $u . $str;
            }
            //echo $str."|".($k - 2)."
";
            $str = rtrim($str, '0');// 去掉末尾的0
            $str = preg_replace("/0+/", "零", $str); // 替换多个连续的0
            if(!isset($exp[$k]))
            {
                $exp[$k] = $exp[$k - 2] . '亿'; // 构建单位
            }
            $u2 = $str != '' ? $exp[$k] : '';
            $res = $str . $u2 . $res;
        }

        // 如果小数部分处理完之后是00,需要处理下
        $dec = rtrim($dec, '0');

        // 小数部分从左向右找
        if(!empty($dec))
        {
            $res .= $int_unit;

            // 是否要在整数部分以0结尾的数字后附加0,有的系统有这要求
            if ($is_extra_zero)
            {
                if (substr($int, -1) === '0')
                {
                    $res.= '零';
                }
            }

            for($i = 0, $cnt = strlen($dec); $i             {
                $u = $dec{$i} > 0 ? $dec_uni[$i] : ''; // 非0的数字后面添加单位
                $res .= $chs[$dec{$i}] . $u;
            }
            $res = rtrim($res, '0');// 去掉末尾的0
            $res = preg_replace("/0+/", "零", $res); // 替换多个连续的0
        }
        else
        {
            $res .= $int_unit . '整';
        }
        return $res;
    }

    echo "

";<br>
    $number = "1000000000000000012345678900.501";<br>
    echo $number.":".num2rmb($number);<br>
    echo "n";<br>
    $number = "1960.30";<br>
    echo $number.":".num2rmb($number);<br>
    echo "n";<br>
    $number = "1960.30";<br>
    echo $number.":".num2rmb($number, "圆", true, true);<br>
    echo "n";<br>
    $number = "123456789.005";<br>
    echo $number.":".num2rmb($number);<br>
    echo "n";<br>
    $number = "123456789.005";<br>
    echo $number.":".num2rmb($number, "元", false);<br>
    echo "n";<br>
    $number = "10000000000000000060009.101";<br>
    echo $number.":".num2rmb($number);<br>
    echo "n";<br>
    $number = "1680.32";<br>
    echo $number.":".num2rmb($number);<br>
?>

例子3

看上面的个人更喜欢下面这个

 代码如下 复制代码

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

 $num=round($num,2);
 $num=$num*100;
 $NewNum = ceil($num);
 if(strlen($NewNum)>10){
 return "金额太大";
 }

 $i=0;
 $c="";

 while (1){
 if($i==0){
 $n=substr($num,strlen($num)-1,1);
 }else{
 $n=$num %10;
 }

 $p1=substr($c1,2*$n,2);

 $p2=substr($c2,2*$i,2);
 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;
 }
 }//end of while| here, we got a chinese string with some useless character

 //we chop out the useless characters to form the correct output
 $j = 0;
 $slen=strlen($c);
 while ($j  $m = substr($c,$j,4);

 if ($m=='零元' || $m=='零万' || $m=='零亿' || $m=='零零'){
 $left=substr($c,0,$j);
 $right=substr($c,$j+2);
 $c = $left.$right;
 $j = $j-2;
 $slen = $slen-2;
 }
 $j=$j+2;
 }

 if(substr($c,strlen($c)-2,2)=='零'){
 $c=substr($c,0,strlen($c)-2);
 } // if there is a '0' on the end , chop it out

 return $c;
}// end of function

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
解决方法:您的组织要求您更改 PIN 码解决方法:您的组织要求您更改 PIN 码Oct 04, 2023 pm 05:45 PM

“你的组织要求你更改PIN消息”将显示在登录屏幕上。当在使用基于组织的帐户设置的电脑上达到PIN过期限制时,就会发生这种情况,在该电脑上,他们可以控制个人设备。但是,如果您使用个人帐户设置了Windows,则理想情况下不应显示错误消息。虽然情况并非总是如此。大多数遇到错误的用户使用个人帐户报告。为什么我的组织要求我在Windows11上更改我的PIN?可能是您的帐户与组织相关联,您的主要方法应该是验证这一点。联系域管理员会有所帮助!此外,配置错误的本地策略设置或不正确的注册表项也可能导致错误。即

Windows 11 上调整窗口边框设置的方法:更改颜色和大小Windows 11 上调整窗口边框设置的方法:更改颜色和大小Sep 22, 2023 am 11:37 AM

Windows11将清新优雅的设计带到了最前沿;现代界面允许您个性化和更改最精细的细节,例如窗口边框。在本指南中,我们将讨论分步说明,以帮助您在Windows操作系统中创建反映您的风格的环境。如何更改窗口边框设置?按+打开“设置”应用。WindowsI转到个性化,然后单击颜色设置。颜色更改窗口边框设置窗口11“宽度=”643“高度=”500“&gt;找到在标题栏和窗口边框上显示强调色选项,然后切换它旁边的开关。若要在“开始”菜单和任务栏上显示主题色,请打开“在开始”菜单和任务栏上显示主题

如何在 Windows 11 上更改标题栏颜色?如何在 Windows 11 上更改标题栏颜色?Sep 14, 2023 pm 03:33 PM

默认情况下,Windows11上的标题栏颜色取决于您选择的深色/浅色主题。但是,您可以将其更改为所需的任何颜色。在本指南中,我们将讨论三种方法的分步说明,以更改它并个性化您的桌面体验,使其具有视觉吸引力。是否可以更改活动和非活动窗口的标题栏颜色?是的,您可以使用“设置”应用更改活动窗口的标题栏颜色,也可以使用注册表编辑器更改非活动窗口的标题栏颜色。若要了解这些步骤,请转到下一部分。如何在Windows11中更改标题栏的颜色?1.使用“设置”应用按+打开设置窗口。WindowsI前往“个性化”,然

OOBELANGUAGE错误Windows 11 / 10修复中出现问题的问题OOBELANGUAGE错误Windows 11 / 10修复中出现问题的问题Jul 16, 2023 pm 03:29 PM

您是否在Windows安装程序页面上看到“出现问题”以及“OOBELANGUAGE”语句?Windows的安装有时会因此类错误而停止。OOBE表示开箱即用的体验。正如错误提示所表示的那样,这是与OOBE语言选择相关的问题。没有什么可担心的,你可以通过OOBE屏幕本身的漂亮注册表编辑来解决这个问题。快速修复–1.单击OOBE应用底部的“重试”按钮。这将继续进行该过程,而不会再打嗝。2.使用电源按钮强制关闭系统。系统重新启动后,OOBE应继续。3.断开系统与互联网的连接。在脱机模式下完成OOBE的所

Windows 11 上启用或禁用任务栏缩略图预览的方法Windows 11 上启用或禁用任务栏缩略图预览的方法Sep 15, 2023 pm 03:57 PM

任务栏缩略图可能很有趣,但它们也可能分散注意力或烦人。考虑到您将鼠标悬停在该区域的频率,您可能无意中关闭了重要窗口几次。另一个缺点是它使用更多的系统资源,因此,如果您一直在寻找一种提高资源效率的方法,我们将向您展示如何禁用它。不过,如果您的硬件规格可以处理它并且您喜欢预览版,则可以启用它。如何在Windows11中启用任务栏缩略图预览?1.使用“设置”应用点击键并单击设置。Windows单击系统,然后选择关于。点击高级系统设置。导航到“高级”选项卡,然后选择“性能”下的“设置”。在“视觉效果”选

Windows 11 上的显示缩放比例调整指南Windows 11 上的显示缩放比例调整指南Sep 19, 2023 pm 06:45 PM

在Windows11上的显示缩放方面,我们都有不同的偏好。有些人喜欢大图标,有些人喜欢小图标。但是,我们都同意拥有正确的缩放比例很重要。字体缩放不良或图像过度缩放可能是工作时真正的生产力杀手,因此您需要知道如何对其进行自定义以充分利用系统功能。自定义缩放的优点:对于难以阅读屏幕上的文本的人来说,这是一个有用的功能。它可以帮助您一次在屏幕上查看更多内容。您可以创建仅适用于某些监视器和应用程序的自定义扩展配置文件。可以帮助提高低端硬件的性能。它使您可以更好地控制屏幕上的内容。如何在Windows11

10种在 Windows 11 上调整亮度的方法10种在 Windows 11 上调整亮度的方法Dec 18, 2023 pm 02:21 PM

屏幕亮度是使用现代计算设备不可或缺的一部分,尤其是当您长时间注视屏幕时。它可以帮助您减轻眼睛疲劳,提高易读性,并轻松有效地查看内容。但是,根据您的设置,有时很难管理亮度,尤其是在具有新UI更改的Windows11上。如果您在调整亮度时遇到问题,以下是在Windows11上管理亮度的所有方法。如何在Windows11上更改亮度[10种方式解释]单显示器用户可以使用以下方法在Windows11上调整亮度。这包括使用单个显示器的台式机系统以及笔记本电脑。让我们开始吧。方法1:使用操作中心操作中心是访问

如何修复Windows服务器中的激活错误代码0xc004f069如何修复Windows服务器中的激活错误代码0xc004f069Jul 22, 2023 am 09:49 AM

Windows上的激活过程有时会突然转向显示包含此错误代码0xc004f069的错误消息。虽然激活过程已经联机,但一些运行WindowsServer的旧系统可能会遇到此问题。通过这些初步检查,如果这些检查不能帮助您激活系统,请跳转到主要解决方案以解决问题。解决方法–关闭错误消息和激活窗口。然后,重新启动计算机。再次从头开始重试Windows激活过程。修复1–从终端激活从cmd终端激活WindowsServerEdition系统。阶段–1检查Windows服务器版本您必须检查您使用的是哪种类型的W

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

뜨거운 도구

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.