将钱转换为PHP中的文本 [英] Convert Money to Text in PHP

查看:148
本文介绍了将钱转换为PHP中的文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要用89.50美元换算成八十九美元和五十美分。是否有一个函数,我失踪的地方?

解决方案

这是一个开始为你。这是一个递归函数,我写了一段时间后(解决一个项目欧拉问题17的一部分),将数字转换为字母...它可以处理一些相当大的数字;)

所有你需要做的就是添加美元和美分的组件根据需要修改。所以基本上你必须调用这个函数一次的美元金额和一次的美分。我不认为这有一个原生的PHP功能。你必须使用库(如Pear)函数。



(你可以看到

 <?php 
函数translateToWords($ number)
{
/ *****
*将数字转换为单词的递归函数
*数字必须是从-999,999,999,999到999,999,999,999包括。
*
*(C)2010 Peter Ajtai
*本程序是免费软件:您可以根据GNU通用公共许可证条款重新发布和/或修改
*由自由软件基金会
*发行,不论是版本3的许可证还是任何更新版本的
*(可选)。
*
*这个程序是分发的,希望它有用,
*但没有任何的保证;甚至没有隐含的保证
*适销性或针对特定用途的适用性。有关更多详细信息,请参阅
* GNU通用公共许可证。
*
*请参阅GNU通用公共许可证:< http://www.gnu.org/licenses/> ;.
*
* /
// zero是一个特殊情况,如果我们不在这里处理它,它甚至会导致类型转换问题
$ max_size = pow(10,18 );
if(!$ number)返回零;
if(is_int($ number)&& $ amp; $ number< abs($ max_size))
{
switch($ number)
{
//设置一些将数字转换成单词的规则
case $ number< 0:
$ prefix =negative;
$ suffix = translateToWords(-1 * $ number);
$ string = $前缀。 。 $后缀;
break;
案例1:
$ string =one;
break;
案例2:
$ string =two;
break;
案例3:
$ string =three;
break;
案例4:
$ string =four;
break;
案例5:
$ string =five;
break;
案例6:
$ string =six;
break;
案例7:
$ string =seven;
break;
案例8:
$ string =eight;
break;
案例9:
$ string =nine;
break;
案例10:
$ string =ten;
break;
案例11:
$ string =eleven;
break;
案例12:
$ string =twelve;
break;
案例13:
$ string =thirteen;
break;
//十四个以后处理
案例15:
$ string =fifteen;
break;
case $ number< 20:
$ string = translateToWords($ number%10);
//十八只有一个t
if($ number == 18)
{
$ suffix =een;
} else
{
$ suffix =teen;
}
$ string。= $ suffix;
break;
情况20:
$ string =twenty;
break;
案例30:
$ string =thirty;
break;
case 40:
$ string =forty;
break;
案例50:
$ string =fifty;
break;
案例60:
$ string =sixty;
break;
案例70:
$ string =seventy;
break;
case 80:
$ string =eighty;
break;
案例90:
$ string =ninety;
break;
case $ number< 100:
$ prefix = translateToWords($ number- $ number%10);
$ suffix = translateToWords($ number%10);
$ string = $前缀。 - 。 $后缀;
break;
//处理所有的数字100到999
case $ number< pow(10,3):
// floor返回一个float不是整数
$ prefix = translateToWords(intval(floor($ number / pow(10,2))))。 百;
if($ number%pow(10,2))$ suffix =and。 translateToWords($号%POW(10,2));
$ string = $前缀。 $后缀;
break;
case $ number< pow(10,6):
// floor返回一个float不是整数
$ prefix = translateToWords(intval(floor($ number / pow(10,3))))。 千;
if($ number%pow(10,3))$ suffix = translateToWords($ number%pow(10,3));
$ string = $前缀。 。 $后缀;
break;
case $ number< pow(10,9):
// floor返回一个float不是整数
$ prefix = translateToWords(intval(floor($ number / pow(10,6))))。 万;
if($ number%pow(10,6))$ suffix = translateToWords($ number%pow(10,6));
$ string = $前缀。 。 $后缀;
break;
case $ number< pow(10,12):
// floor返回一个float不是整数
$ prefix = translateToWords(intval(floor($ number / pow(10,9))))。 十亿
if($ number%pow(10,9))$ suffix = translateToWords($ number%pow(10,9));
$ string = $前缀。 。 $后缀;
break;
case $ number< pow(10,15):
// floor返回一个不是整数的浮点数
$ prefix = translateToWords(intval(floor($ number / pow(10,12))))。 万亿;
if($ number%pow(10,12))$ suffix = translateToWords($ number%pow(10,12));
$ string = $前缀。 。 $后缀;
break;
//注意不要将默认的格式化数字传到这个函数中
//默认的格式是float并导致错误
case $ number< pow(10,18):
// floor返回一个float不是整数
$ prefix = translateToWords(intval(floor($ number / pow(10,15))))。 quadrillion;
if($ number%pow(10,15))$ suffix = translateToWords($ number%pow(10,15));
$ string = $前缀。 。 $后缀;
break;
}
} else
{
echoERROR with - $ number< br />数字必须是 - 之间的整数。 number_format($ max_size,0,。,,)。 和。 number_format($ max_size,0,。,,)。 排他性。
}
return $ string;
}
?>


I need to convert say $89.50 to Eighty-Nine Dollars and Fifty Cents using PHP. Is there a function I'm missing somewhere?

Here's a start for you. It's a recursive function I wrote a while back (part of solving a Project Euler problem 17) that converts numbers to letters... It can handle some pretty big numbers ;)

All you need to do is add the dollars and cents components and modify according to need. So basically you'd have to call the function once for the dollar amount and once for the cents component. I don't think there's a native PHP funciton for this. You'd have to use a library (like Pear) function.

(You can see the function in action):

<?php
function translateToWords($number) 
{
/*****
     * A recursive function to turn digits into words
     * Numbers must be integers from -999,999,999,999 to 999,999,999,999 inclussive.    
     *
     *  (C) 2010 Peter Ajtai
     *    This program is free software: you can redistribute it and/or modify
     *    it under the terms of the GNU General Public License as published by
     *    the Free Software Foundation, either version 3 of the License, or
     *    (at your option) any later version.
     *
     *    This program is distributed in the hope that it will be useful,
     *    but WITHOUT ANY WARRANTY; without even the implied warranty of
     *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     *    GNU General Public License for more details.
     *
     *    See the GNU General Public License: <http://www.gnu.org/licenses/>.
     *
     */
    // zero is a special case, it cause problems even with typecasting if we don't deal with it here
    $max_size = pow(10,18);
    if (!$number) return "zero";
    if (is_int($number) && $number < abs($max_size)) 
    {            
        switch ($number) 
        {
            // set up some rules for converting digits to words
            case $number < 0:
                $prefix = "negative";
                $suffix = translateToWords(-1*$number);
                $string = $prefix . " " . $suffix;
                break;
            case 1:
                $string = "one";
                break;
            case 2:
                $string = "two";
                break;
            case 3:
                $string = "three";
                break;
            case 4: 
                $string = "four";
                break;
            case 5:
                $string = "five";
                break;
            case 6:
                $string = "six";
                break;
            case 7:
                $string = "seven";
                break;
            case 8:
                $string = "eight";
                break;
            case 9:
                $string = "nine";
                break;                
            case 10:
                $string = "ten";
                break;            
            case 11:
                $string = "eleven";
                break;            
            case 12:
                $string = "twelve";
                break;            
            case 13:
                $string = "thirteen";
                break;            
            // fourteen handled later
            case 15:
                $string = "fifteen";
                break;            
            case $number < 20:
                $string = translateToWords($number%10);
                // eighteen only has one "t"
                if ($number == 18)
                {
                $suffix = "een";
                } else 
                {
                $suffix = "teen";
                }
                $string .= $suffix;
                break;            
            case 20:
                $string = "twenty";
                break;            
            case 30:
                $string = "thirty";
                break;            
            case 40:
                $string = "forty";
                break;            
            case 50:
                $string = "fifty";
                break;            
            case 60:
                $string = "sixty";
                break;            
            case 70:
                $string = "seventy";
                break;            
            case 80:
                $string = "eighty";
                break;            
            case 90:
                $string = "ninety";
                break;                
            case $number < 100:
                $prefix = translateToWords($number-$number%10);
                $suffix = translateToWords($number%10);
                $string = $prefix . "-" . $suffix;
                break;
            // handles all number 100 to 999
            case $number < pow(10,3):                    
                // floor return a float not an integer
                $prefix = translateToWords(intval(floor($number/pow(10,2)))) . " hundred";
                if ($number%pow(10,2)) $suffix = " and " . translateToWords($number%pow(10,2));
                $string = $prefix . $suffix;
                break;
            case $number < pow(10,6):
                // floor return a float not an integer
                $prefix = translateToWords(intval(floor($number/pow(10,3)))) . " thousand";
                if ($number%pow(10,3)) $suffix = translateToWords($number%pow(10,3));
                $string = $prefix . " " . $suffix;
                break;
            case $number < pow(10,9):
                // floor return a float not an integer
                $prefix = translateToWords(intval(floor($number/pow(10,6)))) . " million";
                if ($number%pow(10,6)) $suffix = translateToWords($number%pow(10,6));
                $string = $prefix . " " . $suffix;
                break;                    
            case $number < pow(10,12):
                // floor return a float not an integer
                $prefix = translateToWords(intval(floor($number/pow(10,9)))) . " billion";
                if ($number%pow(10,9)) $suffix = translateToWords($number%pow(10,9));
                $string = $prefix . " " . $suffix;    
                break;
            case $number < pow(10,15):
                // floor return a float not an integer
                $prefix = translateToWords(intval(floor($number/pow(10,12)))) . " trillion";
                if ($number%pow(10,12)) $suffix = translateToWords($number%pow(10,12));
                $string = $prefix . " " . $suffix;    
                break;        
            // Be careful not to pass default formatted numbers in the quadrillions+ into this function
            // Default formatting is float and causes errors
            case $number < pow(10,18):
                // floor return a float not an integer
                $prefix = translateToWords(intval(floor($number/pow(10,15)))) . " quadrillion";
                if ($number%pow(10,15)) $suffix = translateToWords($number%pow(10,15));
                $string = $prefix . " " . $suffix;    
                break;                    
        }
    } else
    {
        echo "ERROR with - $number<br/> Number must be an integer between -" . number_format($max_size, 0, ".", ",") . " and " . number_format($max_size, 0, ".", ",") . " exclussive.";
    }
    return $string;    
}
?>

这篇关于将钱转换为PHP中的文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆