首页 > 编程语言 >PHP金额大写

PHP金额大写

时间:2024-10-09 17:13:35浏览次数:1  
标签:金额 大写 chineseInteger fractionalPart integerPart fractionalDigits digitCount else

在网上找了好几个金额大写的代码,经过测试都多少有点问题。代码根据网上的代码优化了以下内容:

1. 连续多个零时,只显示1个零
2. 超过1万时,并且万位无数字时,万不显示
3. 小数只有分时,会显示为角
4. 负数时添加负号

将金额转换为大写,代码如下:

    /**
     * 将数值金额转换为中文大写金额
     */
    public static function convertAmountToCn($amount) {
        $capitals = array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
        $units = array('元', '角', '分', '元整');
        $amount = round($amount, 2);
        $integerPart = (int)$amount;
        $fractionalPart = round(($amount - $integerPart) * 100);
        $isNegative = false;
        if ($integerPart < 0){
            $isNegative = true;
            $integerPart = -$integerPart;
            $fractionalPart = -$fractionalPart;
        }

        $chineseInteger = '';
        if ($integerPart == 0) {
            $chineseInteger = '零';
        } else {
            $integerDigits = str_split($integerPart);
            $digitCount = count($integerDigits);
            if ($digitCount > 12){
                return "金额格式错误,整数部分最多12位";
            }
            for ($i = 0; $i < $digitCount; $i++) {
                $digit = $integerDigits[$i];
                $chineseInteger.= $capitals[$digit];
                if ($i < $digitCount - 1) {
                    if ($digit == 0) {
                        $chineseInteger = rtrim($chineseInteger, '零');
                        if ($i == ($digitCount - 5)) {
                            if (mb_substr($chineseInteger, -1) != '亿'){
                                $chineseInteger.= '万';
                            }
                        }else if ($i == ($digitCount - 9)) {
                            $chineseInteger.= '亿';
                        }else{
                            $chineseInteger.= '零';
                        }
                    } elseif ($i == ($digitCount - 2)) {
                        $chineseInteger.= '拾';
                    } elseif ($i == ($digitCount - 3)) {
                        $chineseInteger.= '佰';
                    } elseif ($i == ($digitCount - 4)) {
                        $chineseInteger.= '仟';
                    } elseif ($i == ($digitCount - 5)) {
                        $chineseInteger.= '万';
                    } elseif ($i == ($digitCount - 6)) {
                        $chineseInteger.= '拾';
                    } elseif ($i == ($digitCount - 7)) {
                        $chineseInteger.= '佰';
                    } elseif ($i == ($digitCount - 8)) {
                        $chineseInteger.= '仟';
                    } elseif ($i == ($digitCount - 9)) {
                        $chineseInteger.= '亿';
                    } elseif ($i == ($digitCount - 10)) {
                        $chineseInteger.= '拾';
                    } elseif ($i == ($digitCount - 11)) {
                        $chineseInteger.= '佰';
                    } elseif ($i == ($digitCount - 12)) {
                        $chineseInteger.= '仟';
                    }
                }
            }
        }

        if ($chineseInteger != '零') {
            $chineseInteger = rtrim($chineseInteger, '零');
        }

        $chineseFractional = '';
        if ($fractionalPart > 0) {
            $fractionalDigits = str_split((int) $fractionalPart);
            if ($fractionalPart < 10){
                array_unshift($fractionalDigits, 0);
            }
            $chineseFractional.= $capitals[$fractionalDigits[0]]. $units[1];
            if (isset($fractionalDigits[1]) && $fractionalDigits[1] > 0) {
                $chineseFractional.= $capitals[$fractionalDigits[1]]. $units[2];
            }
        }
        if ($chineseFractional == '') {
            $chineseCurrency = $chineseInteger. $units[3];
        } else {
            $chineseCurrency = $chineseInteger. $units[0]. $chineseFractional;
        }

        if ($isNegative) {
            $chineseCurrency = '负'. $chineseCurrency;
        }

        return $chineseCurrency;
    }

测试结果:

123456789 => 壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元整
10000006 => 壹仟万零陆元整
102030405 => 壹亿零贰佰零叁万零肆佰零伍元整
123.36 => 壹佰贰拾叁元叁角陆分
1000152000 => 壹拾亿零壹拾伍万贰仟元整
800000000001 => 捌仟亿零壹元整
10000000 => 壹仟万元整
800001000000 => 捌仟亿零壹佰万元整
800010000000 => 捌仟亿壹仟万元整
800000000000.33 => 捌仟亿元叁角叁分
-123456789.66 => 负壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元陆角陆分
1.06 => 壹元零角陆分
0.06 => 零元零角陆分
0.1 => 零元壹角

 

标签:金额,大写,chineseInteger,fractionalPart,integerPart,fractionalDigits,digitCount,else
From: https://www.cnblogs.com/zjfree/p/18454674

相关文章

  • 【php加密算法】加密算法举例
    原创php中文网课程PHP是一种广泛使用的服务器端脚本语言,用于开发动态网页和应用程序。在PHP中,加密算法是保护数据安全和隐私的重要组成部分。PHP提供了多种加密算法,用于加密和解密数据。本文将介绍一些常用的PHP加密算法。MD5算法:MD5(MessageDigestAlgorithm5)是一种广泛使......
  • (2024最新毕设合集)基于SpringBoot的乡村书屋小程序-31881|可做计算机毕业设计JAVA、PHP
    摘要随着信息技术的快速发展和互联网的广泛普及,数字化服务的需求不断增长,乡村书屋作为传统的文化服务机构也需要适应这一变革。本研究将使用Java开发技术,通过springboot作为框架,结合微信小程序,和MySQL作为数据存储的技术,开发一套功能齐备可移动的乡村书屋小程序,旨在提升乡......
  • PHP图书商城网站-计算机毕设 附源码 24657
    图书商城网站的设计与实现摘 要随着信息技术的迅猛发展和互联网的普及,电子商务已经渗透到我们生活的方方面面,其中在线购物因其便捷性和高效性受到了广大用户的青睐。图书作为知识的重要载体,其在线销售平台的建设对于推动知识传播和文化交流具有重要意义。因此,开发一个功......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
    摘要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对社区防疫管理等问题,对社区防疫管理系统进行研究分析,然后开发设计出基于Django框架的社区防......
  • PHP爬虫:获取商品SKU详细信息的利器
    在电子商务领域,SKU(StockKeepingUnit)即库存单位,是商品信息管理中的基础元素。获取商品的SKU详细信息对于电商运营者来说至关重要,它直接关系到库存管理、订单处理、客户服务等多个方面。PHP作为一种广泛使用的服务器端脚本语言,结合爬虫技术,可以有效地抓取电商平台上的商品SKU数......
  • PHP中的HTTP请求:获取taobao商品数据的艺术
    在电子商务的世界里,数据是宝贵的资产。对于开发者来说,能够快速准确地获取商品数据是一项重要的技能。PHP作为一种流行的服务器端脚本语言,结合cURL扩展,可以轻松实现HTTP请求,从而获取API数据。本文将介绍如何在PHP中使用cURL来发送HTTP请求,并获取商品的详细信息。API简介开放......
  • PHP中的HTTP请求:Apache客户端的高效应用
    在现代Web开发中,PHP作为一种流行的服务器端脚本语言,经常需要与外部服务进行交互。这通常涉及到发送HTTP请求来获取或提交数据。ApacheHttpClient是PHP中一个强大的库,用于发送HTTP请求。本文将介绍如何在PHP中使用ApacheHttpClient来执行HTTP请求。ApacheHttpClient简介Ap......
  • 如何对php网站页面进行修改
    对PHP网站页面进行修改通常涉及以下几个步骤:备份现有文件在任何修改之前,确保备份当前的网站文件和数据库。这可以防止意外丢失数据或破坏现有功能。确定修改需求明确你需要修改的内容,比如添加新功能、修复错误或是更新设计元素等。编辑PHP文件使用文本编辑器(如VS......
  • 如何修改php网页内容
    要修改PHP网页的内容,你可以按照以下步骤进行:打开文件:使用文本编辑器或集成开发环境(IDE)如VSCode,PhpStorm等打开包含你要修改内容的PHP文件。定位内容:在文件中找到你想要修改的具体内容。PHP文件通常包含HTML标记以及PHP代码块。确保你清楚哪些部分是HTML,哪些是动态生成的......
  • 第一课 php基础语法 变量 函数
    php语法<?php//代码段?> php输出方法:echo和print不同点:echo-能够输出一个以上的字符串,英文逗号隔开print-只能输出一个字符串,并始终返回1echo比print稍快,并且开销低 注释注释不会被作为程序来读取和执行。它唯一的作用......