PHP 金额数字转换成英文


Posted in PHP onMay 06, 2010
<?php 
$num=1220.01; 
echo fmoney($num);//结果:1,220.21 
echo umoney($num); 
//结果:ONE THOUSAND AND TWO HUNDRED TWENTY DOLLARS AND TWENTY-ONE CENTS ONLY 
echo umoney($num,"rmb"); 
//结果:ONE THOUSAND AND TWO HUNDRED TWENTY YUAN AND TWENTY-ONE FEN ONLY //define 
//格式化货币 
function fmoney($num) { 
$num=0+$num; 
$num = sprintf("%.02f",$num); 
if(strlen($num) <= 6) return $num; 
//从最后开始算起,每3个数它加一个"," 
for($i=strlen($num)-1,$k=1, $j=100; $i >= 0; $i--,$k++) { 
$one_num = substr($num,$i,1); 
if($one_num ==".") { 
$numArray[$j--] = $one_num; 
$k=0; 
continue; 
} 
if($k%3==0 and $i!=0) { 
//如果正好只剩下3个数字,则不加',' 
$numArray[$j--] = $one_num; 
$numArray[$j--] = ","; 
$k=0; 
} else { 
$numArray[$j--]=$one_num; 
} 
} 
ksort($numArray); 
return join("",$numArray); 
} 


function umoney($num,$type="usd") { 
global $numTable,$commaTable,$moneyType; 
//global $numTable; 
$numTable[0]="ZERO "; 
$numTable[1]="ONE "; 
$numTable[2]="TWO "; 
$numTable[3]="THREE "; 
$numTable[4]="FOUR "; 
$numTable[5]="FIVE "; 
$numTable[6]="SIX "; 
$numTable[7]="SEVEN "; 
$numTable[8]="EIGHT "; 
$numTable[9]="NINE "; 
$numTable[10]="TEN "; 
$numTable[11]="ELEVEN "; 
$numTable[12]="TWELVE "; 
$numTable[13]="THIRTEEN "; 
$numTable[14]="FOURTEEN "; 
$numTable[15]="FIFTEEN "; 
$numTable[16]="SIXTEEN "; 
$numTable[17]="SEVENTEEN "; 
$numTable[18]="EIGHTEEN "; 
$numTable[19]="NINETEEN "; 
$numTable[20]="TWENTY "; 
$numTable[30]="THIRTY "; 
$numTable[40]="FORTY "; 
$numTable[50]="FIFTY "; 
$numTable[60]="SIXTY "; 
$numTable[70]="SEVENTY "; 
$numTable[80]="EIGHTY "; 
$numTable[90]="NINETY "; 
$commaTable[0]="HUNDRED "; 
$commaTable[1]="THOUSAND "; 
$commaTable[2]="MILLION "; 
$commaTable[3]="MILLIARD "; 
$commaTable[4]="BILLION "; 
$commaTable[5]="????? "; 
//单位 
$moneyType["usd"]="DOLLARS "; 
$moneyType["usd_1"]="CENTS ONLY"; 
$moneyType["rmb"]="YUAN "; 
$moneyType["rmb_1"]="FEN ONLY"; 

if($type=="") $type="usd"; 
$fnum = fmoney($num); 
$numArray = explode(",",$fnum); 
$resultArray = array(); 
$k=0; 
$cc=count($numArray); 
for($i = 0; $i < count($numArray); $i++) { 
$num_str = $numArray[$i]; 
//echo "<br>"; 
//小数位的处理400.21 
if(eregi("\.",$num_str)) { 
$dotArray = explode(".",$num_str); 
if($dotArray[1] != 0) { 
$resultArray[$k++]=format3num($dotArray[0]+0); 
$resultArray[$k++]=$moneyType[strtolower($type)]; 
$resultArray[$k++]="AND "; 
$resultArray[$k++]=format3num($dotArray[1]+0); 
$resultArray[$k++]=$moneyType[strtolower($type)."_1"]; 
} else { 
$resultArray[$k++]=format3num($dotArray[0]+0); 
$resultArray[$k++]=$moneyType[strtolower($type)]; 
} 
} else { 
//非小数位的处理 
if(($num_str+0)!=0) { 
$resultArray[$k++]=format3num($num_str+0); 
$resultArray[$k++]=$commaTable[--$cc]; 
//判断:除小数外其余若不为零则加and 
for($j=$i; $j <= $cc; $j++) { 
//echo "<br>"; 
//echo $numArray[$j]; 
if($numArray[$j] !=0) { 
$resultArray[$k++]="AND "; 
break; 
} 
} 
} 
} 
} 
return join("",$resultArray); 
} 

function format3num($num) { 
global $numTable,$commaTable; 
$numlen = strlen($num); 
for($i = 0,$j = 0;$i < $numlen; $i++) { 
$bitenum[$j++] = substr($num,$i,1); 
} 
if($num==0) return ""; 
if($numlen == 1) return $numTable[$num]; 
if($numlen == 2) { 
if($num <= 20) return $numTable[$num]; 
//第一位不可能零 
if($bitenum[1]==0) { 
return $numTable[$num]; 
} else { 
return trim($numTable[$bitenum[0]*10])."-".$numTable[$bitenum[1]]; 
} 
} 
//第一个不可能为零 
if($numlen == 3) { 
if($bitenum[1]==0 && $bitenum[2]==0) { 
//100 
return $numTable[$bitenum[0]].$commaTable[0]; 
} elseif($bitenum[1]==0) { 
//102 
return $numTable[$bitenum[0]].$commaTable[0].$numTable[$bitenum[2]]; 
} elseif ($bitenum[2]==0) { 
//120 
return $numTable[$bitenum[0]].$commaTable[0].$numTable[$bitenum[1]*10]; 
} else { 
//123 
return $numTable[$bitenum[0]].$commaTable[0].trim($numTable[$bitenum[1]*10])."-".$numTable[$bitenum[2]]; 
} 
} 
return $num; 
} 
?>
PHP 相关文章推荐
如何在PHP中使用Oracle数据库(3)
Oct 09 PHP
PHP 组件化编程技巧
Jun 06 PHP
在IIS7.0下面配置PHP 5.3.2运行环境的方法
Apr 13 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
Nov 09 PHP
如何在php中正确的使用json
Aug 06 PHP
PHP使用imagick读取PDF生成png缩略图的两种方法
Mar 20 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
分享PHP守护进程类
Dec 30 PHP
[原创]PHP字符串中插入子字符串方法总结
May 06 PHP
关于PHP中协程和阻塞的一些理解与思考
Aug 11 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 PHP
PHP 出现 http500 错误的解决方法
Mar 09 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
May 06 #PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 #PHP
PHP 类商品秒杀计时实现代码
May 05 #PHP
PHP 面向对象 final类与final方法
May 05 #PHP
PHP 面向对象 PHP5 中的常量
May 05 #PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 #PHP
一些被忽视的PHP函数(简单整理)
Apr 30 #PHP
You might like
PHP IE中下载附件问题解决方法
2014/01/07 PHP
php通过字符串调用函数示例
2014/03/02 PHP
php实现httpclient类示例
2014/04/08 PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
2015/02/10 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
js获取时间精确到秒(年月日)
2016/03/16 Javascript
如何提高数据访问速度
2016/12/26 Javascript
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
浅谈JavaScript 代码简洁之道
2019/01/09 Javascript
javascript设计模式 ? 桥接模式原理与应用实例分析
2020/04/13 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python 测试实现方法
2008/12/24 Python
Python之str操作方法(详解)
2017/06/19 Python
利用Python破解斗地主残局详解
2017/06/30 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
python能做哪方面的工作
2020/06/15 Python
中国电视购物:快乐购
2017/02/04 全球购物
军训心得体会
2013/12/31 职场文书
学生宿舍管理制度
2014/01/30 职场文书
业绩考核岗位职责
2014/02/01 职场文书
中学生寄语大全
2014/04/03 职场文书
奥巴马获胜演讲稿
2014/05/15 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
2014年宣传工作总结
2014/11/18 职场文书
七一表彰大会简报
2015/07/20 职场文书
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL