| 热门文章 |
 |
|
| 编辑推荐 |
 |
|
|
|
|
|
作者: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] 下一页
|
|
|