如何使用 PHP 将十进制数转换为单词(货币格式)?

2023-11-24

我这里只需要一点帮助。因为我正在创建一个代码,用于将小数转换为单词中的货币格式。例如如果

我有这个号码

'2143.45'

输出应该是

“两千一百四十三又四十五美分”

我找到了这样的代码,但我不知道如何包含美分。

<?php

function convertNumber($number)
{
    list($integer, $fraction) = explode(".", (string) $number);

    $output = "";

    if ($integer{0} == "-")
    {
        $output = "negative ";
        $integer    = ltrim($integer, "-");
    }
    else if ($integer{0} == "+")
    {
        $output = "positive ";
        $integer    = ltrim($integer, "+");
    }

    if ($integer{0} == "0")
    {
        $output .= "zero";
    }
    else
    {
        $integer = str_pad($integer, 36, "0", STR_PAD_LEFT);
        $group   = rtrim(chunk_split($integer, 3, " "), " ");
        $groups  = explode(" ", $group);

        $groups2 = array();
        foreach ($groups as $g)
        {
            $groups2[] = convertThreeDigit($g{0}, $g{1}, $g{2});
        }

        for ($z = 0; $z < count($groups2); $z++)
        {
            if ($groups2[$z] != "")
            {
                $output .= $groups2[$z] . convertGroup(11 - $z) . (
                        $z < 11
                        && !array_search('', array_slice($groups2, $z + 1, -1))
                        && $groups2[11] != ''
                        && $groups[11]{0} == '0'
                            ? " and "
                            : ", "
                    );
            }
        }

        $output = rtrim($output, ", ");
    }

    if ($fraction > 0)
    {
        $output .= " point";
        for ($i = 0; $i < strlen($fraction); $i++)
        {
            $output .= " " . convertDigit($fraction{$i});
        }
    }

    return $output;
}

function convertGroup($index)
{
    switch ($index)
    {
        case 11:
            return " decillion";
        case 10:
            return " nonillion";
        case 9:
            return " octillion";
        case 8:
            return " septillion";
        case 7:
            return " sextillion";
        case 6:
            return " quintrillion";
        case 5:
            return " quadrillion";
        case 4:
            return " trillion";
        case 3:
            return " billion";
        case 2:
            return " million";
        case 1:
            return " thousand";
        case 0:
            return "";
    }
}

function convertThreeDigit($digit1, $digit2, $digit3)
{
    $buffer = "";

    if ($digit1 == "0" && $digit2 == "0" && $digit3 == "0")
    {
        return "";
    }

    if ($digit1 != "0")
    {
        $buffer .= convertDigit($digit1) . " hundred";
        if ($digit2 != "0" || $digit3 != "0")
        {
            $buffer .= " and ";
        }
    }

    if ($digit2 != "0")
    {
        $buffer .= convertTwoDigit($digit2, $digit3);
    }
    else if ($digit3 != "0")
    {
        $buffer .= convertDigit($digit3);
    }

    return $buffer;
}

function convertTwoDigit($digit1, $digit2)
{
    if ($digit2 == "0")
    {
        switch ($digit1)
        {
            case "1":
                return "ten";
            case "2":
                return "twenty";
            case "3":
                return "thirty";
            case "4":
                return "forty";
            case "5":
                return "fifty";
            case "6":
                return "sixty";
            case "7":
                return "seventy";
            case "8":
                return "eighty";
            case "9":
                return "ninety";
        }
    } else if ($digit1 == "1")
    {
        switch ($digit2)
        {
            case "1":
                return "eleven";
            case "2":
                return "twelve";
            case "3":
                return "thirteen";
            case "4":
                return "fourteen";
            case "5":
                return "fifteen";
            case "6":
                return "sixteen";
            case "7":
                return "seventeen";
            case "8":
                return "eighteen";
            case "9":
                return "nineteen";
        }
    } else
    {
        $temp = convertDigit($digit2);
        switch ($digit1)
        {
            case "2":
                return "twenty-$temp";
            case "3":
                return "thirty-$temp";
            case "4":
                return "forty-$temp";
            case "5":
                return "fifty-$temp";
            case "6":
                return "sixty-$temp";
            case "7":
                return "seventy-$temp";
            case "8":
                return "eighty-$temp";
            case "9":
                return "ninety-$temp";
        }
    }
}

function convertDigit($digit)
{
    switch ($digit)
    {
        case "0":
            return "zero";
        case "1":
            return "one";
        case "2":
            return "two";
        case "3":
            return "three";
        case "4":
            return "four";
        case "5":
            return "five";
        case "6":
            return "six";
        case "7":
            return "seven";
        case "8":
            return "eight";
        case "9":
            return "nine";
    }
}

 $num = 500254.89;
 $test = convertNumber($num);

 echo $test;

?>

有一个梨库可以做到这一点。

EDIT

或者您可以在代码末尾执行此操作

echo $test . ' cents';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 PHP 将十进制数转换为单词(货币格式)? 的相关文章

  • 是否必须配置 PHP 才能通过 PHP 扫描每个目录的配置 INI 文件(即我的情况下的 .htaccess 文件)?

    我在用着Windows 10 家庭单语言 64 位操作系统在我的机器上 我已经安装了最新的副本XAMPP服务器在我的机器上附带PHP 7 2 7 我从 PHP 手册中阅读了以下页面 扫描目录 https secure php net man
  • 自定义 WP 主题时,我应该将导航栏放在“”标签之前还是之后?

    我正在通过制作子主题来自定义 WP 主题 我将 Bootstrap 中的导航栏放入子主题目录中的 header php 文件中 但是 我不确定在哪里放置导航栏代码 我可以把它都放在前面and之后标记成功 例如 无论我选择哪一个 导航栏都显示
  • WooCommerce 使用 AJAX 设置购物车数量?

    我已经为此绞尽脑汁好几天了 需要一些指导 我正在为 WooCommerce 网站完全从头开始制作自定义主题 现在我正在尝试让购物车功能正常工作 我一直试图使用按钮 来更新购物车中产品的数量 对我来说问题似乎是WC 我在functions p
  • 使用 php 获取当前月份的最后 3 个月

    我想获取当前月份最近 3 个月的名称 例如当前月份是八月 所以 我想要六月 七月 八月这样的数据 我已经尝试过这段代码echo date F strtotime 3 months 它只返回六月 如何使用 php 获取当前月份的最后 3 个月
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • .htaccess 异常导致主目录出现问题

    这是我的目录结构 localhost or livehost app bootstrap public vendor code demo 这是我的 htaccess
  • 阻止注销页面后的后退按钮

    我有 php 注销页面 当用户单击注销链接时 请参阅此页面并重定向到索引页面 但是当单击后退按钮时 我会看到带有用户数据的上一页 当然 当我刷新页面时 我看不到以前的页面和数据 我在单击注销并单击后退按钮后检查了其他代码 drupal 但我
  • 通过 facebook graph API 检索 facebook 用户的邮政编码

    我正在尝试使用 facebook graph API 检索用户的邮政编码 我正在使用以下代码 代码在php ini中 facebook new Facebook array appId gt APP ID secret gt APP SEC
  • 限制自己超载外部 API 的速率

    我发现了很多信息和脚本示例 展示了如何对 API 用户进行速率限制 但我无法找到任何示例来说明在施加这些限制时如何对您自己的 API 请求进行速率限制 我总是用诸如以下的代码来限制我的脚本sleep or usleep命令 但感觉这是一种低
  • PHP:读取字体文件的 TrueType/OpenType 元数据

    如何阅读字体详细信息 例如 字体在其元数据中包含版权 姓氏 设计者 版本等信息 我还希望脚本能够计算文件中的字形数量 并返回字体支持的语言 例如 典型的字体可能包含西方语言 瑞典语和罗马语言支持 并具有数百个字形 它应该支持 truetyp
  • PHP Solr PECL 扩展安装

    我已经使用命令安装了 pecl solr pecl install solr 和梨使用 wget http pear php net go pear phar php go pear phar 重启Apache后 我仍然收到错误 Fatal
  • apache_request_headers() 与 $_SERVER

    据我所知 apache request headers 提供与以下相同的信息 SERVER 但按键略有不同 为什么有人应该使用apache request headers 而不仅仅是从那里获取这些信息 SERVER 我在 Centos 上使
  • WordPress 插件中的类自动加载器

    我想编写一个类自动加载器以在 WordPress 插件中使用 该插件将安装在多个站点上 我想尽量减少与其他插件发生冲突的机会 自动加载器将是这样的 function autoload name some code here 我的主要问题是
  • suhosin.mt_srand.ignore 在 PHP 中一致洗牌数组的解决方法?

    我有一个 PHP 脚本 需要随机化一个具有一致结果的数组 这样它就可以向用户呈现前几个项目 然后如果他们愿意 他们可以从同一个打乱的集合中提取更多结果 我目前使用的是这个 基于我相信的 Fisher Yates 算法 function sh
  • 如何在 Zend Framework 3 中注册自定义表单视图助手

    我正在将继承的 Zend Framework 2 应用程序迁移到 Zend Framework 3 并且在注册自定义表单视图助手时遇到了一些困难 这些助手在应用程序使用版本 2 时起作用 主要用于添加标签属性以实现可访问性 例如 这是一个自
  • 检查 $_POST 数据

    我正在对表单进行一些垃圾邮件检查 下面的代码在我的本地主机上正常工作 如果为 true 则重定向到 google com 但是 当它在生产服务器上时却不起作用 执行脚本的其余部分并且不重定向到 Google com if POST SERV
  • php curl 使用 GET 发送变量 奇怪的结果

    我正在尝试调用远程站点上页面中的网址 决定使用curl 在远程站点上 url 变量显示为 REQUEST Array var1 gt val1 amp var2 gt val2 amp var3 gt val3 被调用的url是 http
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad
  • 为什么我的会话仍然存在?

    我一定很愚蠢 因为似乎一件相当明显的事情现在让我完全困惑 我有一个会议 ie SESSION handbag id 在某个时刻 我需要彻底终止这个会话 ie at the start of the page session start el
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中

随机推荐

  • 同步三个线程

    在采访中被问到这个问题 试图解决它 但没有成功 我想到使用 CyclicBarrier 有三个线程 T1 打印 1 4 7 T2 打印 2 5 8 T3 打印 3 6 9 如何同步这三个来打印序列 1 2 3 4 5 6 7 8 9 我尝试
  • 从 2 个向量的串联构建一个向量

    有没有办法构建一个vector作为 2 的串联vectors 除了创建一个辅助函数 例如 const vector
  • 延迟加载 Angular 13+ 模块,无需使用已弃用的编译器

    我曾与加载和实例化 Angular 模块 不带路由器 但现在 在 Angular 13 中 我发现实例化 NgModule 的常用编译器工具已被弃用 这是我加载模块的常用代码 const moduleFactory await this c
  • 如何使用 Tensorflow 数据集管道进行可变长度输入?

    我正在 Tensorflow 中通过不同长度的数字序列数据集训练循环神经网络 并一直在尝试使用tf data用于创建高效管道的 API 但是我似乎无法让这个东西发挥作用 我的方法 我的数据集是一个 NumPy 形状数组 10000 32 2
  • 如何导出一个元素的所有相关 HTML/CSS

    我确信这个问题存在 但我找不到它 有没有tool这样可以获取一个元素我的 HTML 文档并导出那个元素 其全部parents及其所有的相关CSS but 没有其他的 EDIT 抱歉我说得不够清楚 我并不意味着我想要 Firebug DevT
  • Python 中的离散拉普拉斯算子(del2 等效)

    我需要 Matlab Octave 离散拉普拉斯算子 函数 的 Python Numpy 等效项del2 我尝试了几个Python解决方案 其中没有一个与输出匹配del2 在八度上我有 image 3 4 6 7 8 9 10 11 12
  • 在 C# 中以编程方式将 SSRS 报告另存为 PDF

    我已经阅读了有关此问题的多篇文章 但它们最终都无法正常工作 或者位于 vb net 中 我目前拥有的 这些报告可通过 URL 进行访问 该 URL 将其呈现为 PDF 并在用户单击按钮时将其保存在下载文件夹中 这些报告具有通用名称 例如 O
  • 是否有一种技术可以将 XSL 转换管道合并为单个转换?

    我已经编写了一个使用 15 个 XSL 样式表管道的应用程序 并且我开始致力于调整其性能 它被设计为可移植的 因此可以在 Web 浏览器环境和桌面上运行 在桌面上 我认为将样式表作为多个转换的管道分开可能是有意义的 因为这允许每个单独的转换
  • 模糊半透明形式的背景(如 Aero 玻璃)

    我有一个无边框 不可调整大小的 WPF 表单 WindowStyle None AllowsTransparency True ResizeMode NoResize 具有半透明背景 这是一个半透明的红色矩形表单现在在记事本上运行的样子的图
  • ASP.NET 动态数据 TextSearch 自定义过滤器模板

    我正在尝试为所有基于文本的搜索实现自定义过滤器模板 但在构建查询时遇到了问题 我一直按照发布的说明进行操作这个博客但不确定如何更改 GetQueryable 方法来执行 WHERE columnAttribute LIKE somethin
  • EmberJS - 如何使用 linkTo 动态生成链接?

    有没有办法使用动态生成链接link to通过传递带有路由路径的变量来提供帮助 例如 不要像这样对路径进行硬编码 linkTo route subroute model model title linkTo 我希望能够通过link tohel
  • 如何通过 UDP CFSocket 发送数据包?

    我是网络方面的新手 但我是一名 C C 程序员 并且正在使用 Objective C 这是针对 OSX iPhone 的 我正在尝试学习如何使用 cfsocket 通过 UDP 套接字发送魔术包 我见过有诸如 AsyncUDP Socket
  • Angular 5:条件模块延迟加载

    我在尝试根据用户配置文件延迟加载模块时遇到问题 我定义了三个默认路径 每个路由的路径为空 每个用户都可以访问特定的模块 我正在使用守卫来确定当前的用户配置文件 实际上我正在手动切换以通过设置来设置默认加载的模块常量 canGo true 预
  • 具有 Webview 的 IOS 和 Android 应用程序仅被视为混合应用程序还是 Web 应用程序?

    我的困惑是 用 Java 或 Swift 创建的仅带有 Web 视图的应用程序是否被视为混合应用程序或 Web 应用程序 我知道 Web 应用程序几乎只使用 Web 但如果它是通过 Java Webview 的 Web 视图 那么它真的被视
  • 即将推出的 Java 并发库:jsr166y 是什么? jsr166z?

    我想尝试一下即将推出的并发库 将被包含在Java 7 根据这个网站 好像有名字JSR166 在大多数地方 其参考实现被称为jsr166y 虽然很少有资源称之为jsr166z 我完全发现了两个不同的每个参考实现的 javadocs 文档用于j
  • mongoose:禁止更新特定字段

    var post mongoose Schema createdOn Date 我想允许设置 createdOn仅在创建文档时字段 并且不允许在将来的更新中更改它 Mongoose 中是如何完成的 我通过设置达到了这个效果 createdO
  • 如何从可迭代的元组创建多维 numpy 数组?

    我想从可迭代对象创建一个 numpy 数组 它会产生值的元组 例如数据库查询 Like so data db execute SELECT col1 col2 col3 col4 FROM data A np array list data
  • 仔细检查片段+视图持有者模式是否正确实现

    由于内存泄漏 我一直在重新编写一些代码 该代码是应用程序帮助部分的一部分 我们在其中使用 FragmentActivity 和 FragmentPageAdapter 来允许用户滑动浏览不同的帮助屏幕 每个片段 下面的SectionFrag
  • gem install json 因重新定义 struct timezone/timespec 而失败

    我在 Windows 上使用 Ruby 1 9 3 和 DevKit Win 7 64 位上的所有 32 位 现在我尝试安装 Rails 但从捆绑包中收到错误 如果我尝试运行 bundle 抱怨什么 gem install json 我收到
  • 如何使用 PHP 将十进制数转换为单词(货币格式)?

    我这里只需要一点帮助 因为我正在创建一个代码 用于将小数转换为单词中的货币格式 例如如果 我有这个号码 2143 45 输出应该是 两千一百四十三又四十五美分 我找到了这样的代码 但我不知道如何包含美分