热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » PHP/Perl编程 » [php] 数字金额 转 大写金额

[php] 数字金额 转 大写金额

论坛链接
  • [php] 数字金额 转 大写金额
  • 发布时间:2007-09-30 14:04:29    浏览数:8027    发布者:tzlink    设置字体【   
<?php
/**
* @file
* @version 1.0
* @author 网海浪子
* @date 2006-6-16
* @email [email]sxf02615@163.com[/email]
* @brief 数字金额 转 大写金额
* @转载 请注明出处
*/

class moneyToChinese
{
//数字金额
var $numMoney = null;

//整数单位 可继续扩展
var $intNumBit = array(1=>"",2=>"拾",3=>"佰",4=>"仟",5=>"万",6=>"拾",7=>"佰",8=>"仟",9=>"亿",10=>"拾",11=>"佰",12=>"仟");

//小数单位 可继续扩展
var $floatNumBit = array(1=>"角",2=>"分");

//阿拉伯数字中文大写
var $moneyOfNum = array(0=>'零',1=>'壹',2=>'贰',3=>'叁',4=>'肆',5=>'伍',6=>'陆',7=>'柒',8=>'捌',9=>'玖');

//数字金额的整数部分
var $intNum = null;

//数字金额的小数部分
var $floatNum = null;

//转换后的大写金额
var $ChineseStr = null;

/**
* @brief 构造函数
*
* @param $num: 初始化数字金额
*
* @return 无返回值
*/
function moneyToChinese($num)
{
if(strlen($num)>12)
{
$this->ChineseStr = "位数暂时不能大于12位";
return false;
}
if(is_int($num)||is_float($num))
{
$this->numMoney = strval($num);
$data = moneyToChinese::expNum($num);
$this->intNum = $data['int'];
$this->floatNum = $data['float'];
$this->intToChinese($this->intNum);
$this->ChineseStr.= "元";
$this->floatToChinese($this->floatNum);
$this->ChineseStr.= "整";
}
}

/**
* @brief 分割数为整数与小数 返回数组
*
* @param $num: 金额
*
* @return 如果是float数则返回整数和小数部分为字符串 如果是整数返回整数部分
*/
function expNum($num)
{
$data['int'] = null;
$data['float'] = null;
if(is_int($num))
{
$data['int'] = $num;
return $data;
}
else
{
$expArray = explode(".",$num);
$data['int'] = $expArray[0];
$data['float'] = $expArray[1];
return $data;
}
}

/**
* @brief 初始化对象 this 转换整数部分
*
* @param $intNum: 整数金额部分转换大写
*
* @return 无返回值
*/
function intToChinese($intNum)
{
if($intNum =='')return false;
$num_index = 0;//初始化数组小标从0开始
$num_len = strlen($intNum);//整数位的长度
$pre_num = 8;//初始化前序数为非零,null,false 值 避免与0冲突
for($num_index;$num_index<$num_len;$num_index++)
{
$curr_num = substr($intNum,$num_index,1);//从$num_index位置开始取1个数出来作为当前数
$curr_bit_index = $num_len-$num_index;//当前数的位数组下标
if($curr_num!=0)
{
if($pre_num==0) //当且仅当 前序数 为零 当前数不为零时 加 人民币"零"
{
$this->ChineseStr.=$this->moneyOfNum[0];
}
$this->ChineseStr.=$this->moneyOfNum[$curr_num];
$this->ChineseStr.=$this->intNumBit[$curr_bit_index];
}
else
{
$pre_zero_num = 0;//前面三个前序数为0的位的个数
$pre_num_index = $num_index;
$for_num = 3;
for($for_num=1;$for_num<=3;$for_num++)
{
$pre_num_index--;
if(substr($intNum,$pre_num_index,1)!=0)$pre_zero_num++;
}
if($pre_zero_num!=0)
{
if($curr_bit_index==5)$this->ChineseStr.="万";
if($curr_bit_index==9)$this->ChineseStr.="亿";
}
}
$pre_num = $curr_num;//用当前值初始化下次循环的前序数
}
}

/**
* @brief 初始化对象 this 转换小数部分
*
* @param $intNum: 小数金额部分转换大写
*
* @return 无返回值
*/
function floatToChinese($floatNum)
{
if($floatNum =='')return false;
$numLen = strlen($floatNum);
$pre_num = null;
$zero_num = 0;
for($i=0;$i<$numLen;$i++)
{
$j= $i+1;
$num = substr($floatNum,$i,1);
$pre_num = $num;
if($pre_num == $num&&$pre_num ==0)
{
$zero_num++;
if($zero_num==1)$this->ChineseStr.= "零";
continue;
}
else
{
$pre_num = null;
$zero_num = 0;
}
$this->ChineseStr.= $this->moneyOfNum[$num];
$this->ChineseStr.= $this->floatNumBit[$j];
}
}
}
//echo "<pre>";
//$test = new moneyToChinese(100000000.12);
//print_r ($test);
?>
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理