注册 | 登录
收藏 | 帮助
热门文章
编辑推荐
相关文章  
安全:10个常用数字证书应用实例
小技巧:Win XP下数字CD播放模式
取消Windows XP下驱动程序数字签
数字签名(ms)
用BP网络算法实现对含噪声0到9数
C++小技巧:用Socket接收和转换数
用Socket接收和转换数字和字符串
VC数字图像处理编程讲座之五
VC数字图像处理编程讲座之四
VC数字图像处理编程讲座之三
您现在的位置: 顶尖设计 >> IT学院 >> 编程开发 >> PHP >> 文章正文
把数字转换成英语或是汉语表达
作者:longnetpro  来源:ChinaUnix.net  点击:  更新:2006-12-19
简介:
今天总算有点空,抽时间写了一个类,把数字转换成英语或汉语表达,用法很简单。下面是代码及演示:


文件:textnumber.class.php
代码:
<?php
if(!defined('_IN_APP')) exit;

class TextNumber
{
   var $resource = null;
   var $number = 0;
   var $groupLength = 3;
   var $wordSeperated = true;
   
   function setResource($resource = null){
      $this->resource = $resource;
   }
   
   function setNumber($number){
      $this->number = $number;
   }
   
   function setWordSeperated($seperated){
      $this->wordSeperated = $seperated;
   }
   
   function split_number(&$sign, &$int, &$fraction){
      list($int, $fraction) = explode('.', $this->number);
      $sign = '';
      if ($int{0} == '-'){
         $sign = '-';
         $int = substr($int, 1);
      }
      $int = preg_replace('/[^0-9]/', '', $int);
      $int = preg_replace('/^[0]+/', '', $int);
      $int = ($int == '')? '0' : $int;
      $fraction = preg_replace('/[^0-9]/', '', $fraction);
      if (preg_match('/^0*$/', $fraction))
         $fraction = '';
   }

   function split_group($int){
      $int = strrev($int);
      $int = chunk_split($int, $this->groupLength, ',');
      $int = substr(strrev($int), 1);
      return $int;
   }
   
   function addSeperator($word = ''){
      if ($this->wordSeperated){
         if ($word != '')
            $word .= ' ';
      }
      return $word;
   }
   
   function trans_sign($sign){
      if ($sign == '-'){
         if (isset($this->resource['group']['-']))
            return $this->addSeperator($this->resource['group']['-']);
         else
            return '-';
      }else{
         return '';
      }
   }
   
   function trans_int($int){
      return $this->split_group($int);
   }
   
   function trans_dec_point($fraction = 0){
      if (isset($this->resource['group']['.'])){
         $point = $this->resource['group']['.'];
         $point = $this->addSeperator($point);
      }else{
         $point = '.';
      }
      return ($fraction == 0)? '' : $point;
   }
   
   function trans_fraction($fraction){
      return ($fraction == 0)? '' : $fraction;
   }

   function getText(){
      $this->split_number($sign, $int, $fraction);
      $ssign = $this->trans_sign($sign);
      $sint = $this->trans_int($int);
      $spoint = $this->trans_dec_point($fraction);
      $sfrac = $this->trans_fraction($fraction);
      return trim($ssign.$sint.$spoint.$sfrac);
   }
}

//---------------------------------------------------------------------------

class TextNumberFactory
{
   function &createTextNumber($lang = 'en_US'){
      $class = 'TextNumber_'.$lang;
      if (class_exists($class)){
         $textnumber =& new $class;
         if (!is_subclass_of($textnumber, 'TextNumber')){
            unset($textnumber);
            $textnumber =& new TextNumber;
         }
      }else{
         $textnumber =& new TextNumber;
      }
      return $textnumber;
   }
}

//---------------------------------------------------------------------------

class TextNumber_en_US extends TextNumber
{
   function TextNumber_en_US(){
      $this->__construct();
   }
   
   function __construct(){
      $this->resource = array(
         'group_int' => array(
            0 => 'zero',
            1 => 'one',
            2 => 'two',
            3 => 'three',
            4 => 'four',
            5 => 'five',
            6 => 'six',
            7 => 'seven',
            8 => 'eight',
            9 => 'nine',
            10 => 'ten',
            11 => 'eleven',
            12 => 'twelve',
            13 => 'thirteen',
            14 => 'fourteen',
            15 => 'fifteen',
            16 => 'sixteen',
            17 => 'seventeen',
            18 => 'eighteen',
            19 => 'nineteen',
            20 => 'twenty',
            30 => 'thirty',
            40 => 'forty',
            50 => 'fifty',
            60 => 'sixty',
            70 => 'seventy',
            80 => 'eighty',
            90 => 'ninety',
            100 => 'hundred'
         ),
         'group' => array(
            0 => '',
            1 => 'thousand',
            2 => 'million',
            3 => 'billion',
            4 => 'trillion',
            '-' => 'minus',
            '.' => 'point',
            'group_number' => 4
         )
      );
   }
   
   function trans_group_int($group_int){
      $trans =& $this->resource['group_int'];
      $h = intval(floor($group_int / 100));
      $r = $group_int % 100;
      $sh = '';
      if ($h != 0){
         $sh = $this->addSeperator($trans[$h]);
         $sh .= $this->addSeperator($trans[100]);
      }
      $sr = '';
      if ($r != 0){
         if ($r <= 20){
            $sr = $this->addSeperator($trans[$r]);
         }else{
            $rr = $r % 10;
            $rt = $r - $rr;
            if ($rr == 0){
               $sr = $this->addSeperator($trans[$r]);
            }else{
               $sr = $trans[$rt];
               $sr .= '-'.$this->addSepe

[1] [2] [3] 下一页






  • 上一篇文章:
  • 下一篇文章:
  • 分享此文:该页面添加到 Mister Wong 添加到雅虎Yahoo!收藏 Add to:Del.icio.us Post to Furl Digg this 添加到Google书签 reddit spurl blogmarks 365Key 评论  收藏  分享  打印
     我来说两句
    姓名:       验证码:   
    主页: 
    评分: 1分 2分 3分 4分 5分
    本频道近期热评文章:
      关于我们 | 联系我们 | 站点地图 | 广告投放 | 友情链接 | 在线留言 | 版权申明
    版权所有 © 2004-2007 顶尖设计(bobd.cn)
    未经授权禁止转载,摘编,复制本站内容或建立镜像. 沪ICP备07504942号 
    网络110
    报警服务