在网上找到一个将数字转换为英文大写的类,,但是小数点后的转换是错的,例如:650.23  转换后是SIX HUNDRED AND FIFTY POINT TWO THREE
但正确应该是SIX HUNDRED AND FIFTY POINT TWENTY THREE请问如何修改?<?php 
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->addSeperator($trans[$rr]); 
            } 
         } 
      } 
      $ss = ''; 
      if ($sh != '' && $sr != ''){ 
         $ss = $sh. $this->addSeperator('and') .$sr; 
      }else{ 
         $ss = $sh.$sr; 
      } 
      return $ss; 
   } 
    
   function trans_int($int){ 
      if ($int <= 20) return $this->addSeperator($this->resource['group_int'][intval($int)]); 
      $groups = explode(',', $this->split_group($int)); 
      $groups = array_reverse($groups); 
      $cgroup = $this->resource['group']['group_number']; 
      $result = ''; 
      foreach($groups as $key => $group_int){ 
         $sgroup = ''; 
         $k = $key % $cgroup; 
         if ((int)$group_int != 0){ 
            $sgroup = $this->resource['group'][$k]; 
            $sgroup = $this->addSeperator($sgroup); 
            $sgroup = $this->trans_group_int($group_int).$sgroup; 
         } 
         $ss = ''; 
         if ($k == 0 && $key >= $cgroup) 
            $ss = $this->addSeperator($this->resource['group'][$cgroup]); 
         $result = $sgroup.$ss.$result; 
      } 
      return $result; 
   } 
    
   function trans_fraction($fraction){ 
      if ($fraction == '') return ''; 
      $fraction = preg_replace('/([0-9])/e', '$this->addSeperator($this->resource[\'group_int\'][\\1])', $fraction); 
      return $fraction; 
   } 
    
   function getText($isupper = false){ 
      $text = parent::getText(); 
      if ($isupper){ 
         $text = strtoupper($text); 
      } 
      return $text; 
   } 
} ?>