Yii Framework v1.1.10 绫诲弬鑰

CNumberFormatter

system.i18n
缁ф壙 class CNumberFormatter » CComponent
婧愯嚜 1.0
鐗堟湰 $Id: CNumberFormatter.php 2798 2011-01-01 19:29:03Z qiang.xue $
婧愮爜 framework/i18n/CNumberFormatter.php
CNumberFormatter鎻愪緵鏁板瓧杞崲涓烘湰鍦板寲鍔熻兘銆

CNumberFormatter鏍煎紡鍖栦竴涓暟瀛楋紙integer鎴栬協loat锛夛紝鐒跺悗杈撳嚭鍩轰簬鎸囧畾鏍煎紡鐨勫瓧绗︿覆銆 涓涓 CNumberFormatter 瀹炰緥璺熶竴涓尯鍩熷叧鑱旓紝 鍥犳鐢熸垚鐨勫瓧绗︿覆鍙嶆槧浜嗙浉鍏冲尯鍩熺殑浣跨敤鏂瑰紡銆

CNumberFormatter褰撳墠鏀寔璐у竵鏍煎紡锛岀櫨鍒嗘瘮鏍煎紡鍜屽崄杩涘埗鏍煎紡锛岃繕鏈夐氱敤鏍煎紡銆 鍓嶄笁绉嶆牸寮忓湪鍖哄煙鏁版嵁閲岄潰鎸囧畾锛 閫氱敤鏍煎紡鍏佽浣犺緭鍏ヤ竴浜涗换鎰忔牸寮忓瓧绗︿覆銆

涓涓牸寮忓寲瀛楃涓插彲浠ョ敱浠ヤ笅鎸囧畾鐨勫瓧绗︾粍鎴愶細
  • 鐐癸紙.锛夛細鍗佽繘鍒舵爣鐐广傚彲浠ユ浛鎹㈡垚鏈湴鍖栫殑鍗佽繘鍒舵爣鐐广
  • 閫楀彿锛,锛夛細缁勭殑鍒嗛殧绗︺傚畠鍙互鏇挎崲鎴愭湰鍦板寲鐨勭粍鍒嗛殧绗︺
  • 闆讹紙0):蹇呴渶鐨勬暟瀛椼 杩欎釜鐢ㄦ潵鎸囧畾鏁板瓧鍑虹幇鍦ㄥ摢涓綅缃紙浠0涓洪浣嶏紝鎴栬呮病鏈夛級銆
  • 鍝堝笇(#锛夛細鍙夋暟瀛椼傝繖涓富瑕佹槸鐢ㄦ潵鎸囧畾鍗佽繘鍒剁偣鍜岀粍鍒嗛殧绗︾殑浣嶇疆銆
  • 璐у竵锛埪わ級锛氶噾閽卞崰浣嶇銆傚畠鍙互鏇挎崲鎴愭湰鍦板寲鐨勯噾閽辩鍙枫
  • 鐧惧垎鍙凤紙%锛夛細鐧惧垎鍙枫傚鏋滃畠鍑虹幇锛岄偅涔堝湪鏍煎紡鍖栬繖涓暟瀛椾箣鍓嶅厛闄や互100銆
  • 鍗冨垎鍙凤紙鈥帮級锛氬崈鍒嗗彿銆傚鏋滃畠鍑虹幇锛岄偅涔堝湪鏍煎紡鍖栬繖涓暟瀛椾箣鍓嶅厛闄や互1000銆
  • 鍒嗗彿锛;锛夛細姝f暟鍜岃礋鏁扮殑瀛愭ā寮忕殑瀛楃鍒嗛殧銆


浠讳綍鍛ㄨ竟妯″紡锛堝瓙妯″紡锛変細琚繚鐣

浠ヤ笅鏄竴浜涗緥瀛愶細
妯″紡 鈥#,##0.00鈥 浼氬皢 12345.678 鏍煎紡鍖栨垚 鈥12,345.68鈥濄
妯″紡 鈥#,#,#0.00鈥 浼氬皢 12345.6 鏍煎紡鍖栨垚 鈥1,2,3,45.60鈥濄
娉ㄦ剰锛屽湪绗竴涓緥瀛愰噷锛屽厛搴旂敤鏍煎紡鍐嶅鏁板瓧杩涜鍥涜垗浜斿叆銆 绗簩涓緥瀛愶紝妯″紡鎸囧畾浜嗕袱涓垎缁勫ぇ灏忋

CNumberFormatter 灏濊瘯Unicode Technical Standard #35瀹炵幇鏁板瓧鏍煎紡鍖栥 鏈疄鐜颁互涓嬪姛鑳斤細
  • 鏄捐憲浣嶆暟
  • 绉戝璁$畻娉
  • 浠绘剰鏂囧瓧瀛楃
  • 浠绘剰濉厖

鍏叡鏂规硶

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
__call() 濡傛灉绫讳腑娌℃湁璋冪殑鏂规硶鍚嶏紝鍒欒皟鐢ㄨ繖涓柟娉曘 CComponent
__construct() 鏋勯犲嚱鏁般 CNumberFormatter
__get() 杩斿洖涓涓睘鎬у笺佷竴涓簨浠跺鐞嗙▼搴忓垪琛ㄦ垨涓涓涓哄悕绉般 CComponent
__isset() 妫鏌ヤ竴涓睘鎬ф槸鍚︿负null銆 CComponent
__set() 璁剧疆涓涓粍浠剁殑灞炴у笺 CComponent
__unset() 璁剧疆涓涓粍浠剁殑灞炴т负null銆 CComponent
asa() 杩斿洖杩欎釜鍚嶅瓧鐨勮涓哄璞° CComponent
attachBehavior() 闄勫姞涓涓涓哄埌缁勪欢銆 CComponent
attachBehaviors() 闄勫姞涓涓涓哄垪琛ㄥ埌缁勪欢銆 CComponent
attachEventHandler() 涓轰簨浠堕檮鍔犱竴涓簨浠跺鐞嗙▼搴忋 CComponent
canGetProperty() 纭畾灞炴ф槸鍚﹀彲璇汇 CComponent
canSetProperty() 纭畾灞炴ф槸鍚﹀彲鍐欍 CComponent
detachBehavior() 浠庣粍浠朵腑鍒嗙涓涓涓恒 CComponent
detachBehaviors() 浠庣粍浠朵腑鍒嗙鎵鏈夎涓恒 CComponent
detachEventHandler() 鍒嗙涓涓瓨鍦ㄧ殑浜嬩欢澶勭悊绋嬪簭銆 CComponent
disableBehavior() 绂佺敤涓涓檮鍔犺涓恒 CComponent
disableBehaviors() 绂佺敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 CComponent
enableBehavior() 鍚敤涓涓檮鍔犺涓恒 CComponent
enableBehaviors() 鍚敤缁勪欢闄勫姞鐨勬墍鏈夎涓恒 CComponent
evaluateExpression() 璁$畻涓涓狿HP琛ㄨ揪寮忥紝鎴栨牴鎹粍浠朵笂涓嬫枃鎵ц鍥炶皟銆 CComponent
format() 鍩轰簬鎸囧畾妯″紡鏍煎紡鍖栨暟瀛椼 CNumberFormatter
formatCurrency() 浣跨敤鏈湴鍖栫殑璐у竵鏍煎紡鏉ユ牸寮忓寲鏁板瓧銆 CNumberFormatter
formatDecimal() 浣跨敤鏈湴鍖栫殑鍗佽繘鍒舵牸寮忔潵鏍煎紡鍖栨暟瀛椼 CNumberFormatter
formatPercentage() 浣跨敤鏈湴鍖栫殑鐧惧垎姣旀牸寮忔潵鏍煎紡鍖栨暟瀛椼 CNumberFormatter
getEventHandlers() 杩斿洖涓涓簨浠剁殑闄勫姞澶勭悊绋嬪簭鍒楄〃銆 CComponent
hasEvent() 纭畾涓涓簨浠舵槸鍚﹀畾涔夈 CComponent
hasEventHandler() 妫鏌ヤ簨浠舵槸鍚︽湁闄勫姞鐨勫鐞嗙▼搴忋 CComponent
hasProperty() 纭畾灞炴ф槸鍚﹁瀹氫箟銆 CComponent
raiseEvent() 鍙戣捣涓涓簨浠躲 CComponent

鍙椾繚鎶ゆ柟娉

闅愯棌缁ф壙鏂规硶

鏂规硶鎻忚堪瀹氫箟鍦
formatNumber() 鍩轰簬涓涓牸寮忔潵鏍煎紡鍖栨暟瀛椼 CNumberFormatter
parseFormat() 瑙f瀽鎸囧畾鐨勫瓧绗︿覆妯″紡銆 CNumberFormatter

鏂规硶璇︾粏

__construct() 鏂规硶
public void __construct(mixed $locale)
$locale mixed 鏈湴鍖朓D锛堝瓧绗︿覆锛夋垨鑰匔Locale鐨勫疄渚
婧愮爜锛 framework/i18n/CNumberFormatter.php#70 (鏄剧ず)
public function __construct($locale)
{
    if(
is_string($locale))
        
$this->_locale=CLocale::getInstance($locale);
    else
        
$this->_locale=$locale;
}

鏋勯犲嚱鏁般

format() 鏂规硶
public string format(string $pattern, mixed $value, string $currency=NULL)
$pattern string 鏍煎紡妯″紡
$value mixed 瑕佹牸寮忓寲鐨勬暟瀛
$currency string 3涓瓧姣嶇殑ISO 4217鐮併備緥濡傦細鈥淯SD鈥濅唬琛ㄧ編鍏冿紝鈥淓UR鈥濅唬琛ㄦ鍏冦 妯″紡涓殑璐у竵鐐逛綅绗﹀皢浼氳鏇挎崲鎴愯揣甯佺鍙枫 濡傛灉涓簄ull锛屽皢涓嶅仛鏇存敼銆
{return} string 鏍煎紡鍖栫粨鏋溿
婧愮爜锛 framework/i18n/CNumberFormatter.php#91 (鏄剧ず)
public function format($pattern,$value,$currency=null)
{
    
$format=$this->parseFormat($pattern);
    
$result=$this->formatNumber($format,$value);
    if(
$currency===null)
        return 
$result;
    else if((
$symbol=$this->_locale->getCurrencySymbol($currency))===null)
        
$symbol=$currency;
    return 
str_replace('陇',$symbol,$result);
}

鍩轰簬鎸囧畾妯″紡鏍煎紡鍖栨暟瀛椼 娉ㄦ剰锛屽鏋滄牸寮忎腑涓寘鍚%鈥欙紝鏁板瓧棣栧厛闄や互100銆 濡傛灉鏍煎紡涓寘鍚樷扳欙紝鏁板瓧棣栧厛闄や互1000銆 濡傛灉鏍煎紡涓寘鍚揣甯佺偣浣嶇锛 瀹冨皢浼氭浛鎹㈡垚鏈湴鍖栨寚瀹氱殑璐у竵鐐逛綅绗︺

formatCurrency() 鏂规硶
public string formatCurrency(mixed $value, string $currency)
$value mixed 瑕佹牸寮忓寲鐨勬暟瀛
$currency string 3涓瓧姣嶇殑ISO 4217鐮併備緥濡傦細鈥淯SD鈥濅唬琛ㄧ編鍏冿紝鈥淓UR鈥濅唬琛ㄦ鍏冦 妯″紡涓殑璐у竵鐐逛綅绗﹀皢浼氳鏇挎崲鎴愯揣甯佺鍙枫
{return} string 鏍煎紡鍖栫粨鏋溿
婧愮爜锛 framework/i18n/CNumberFormatter.php#109 (鏄剧ず)
public function formatCurrency($value,$currency)
{
    return 
$this->format($this->_locale->getCurrencyFormat(),$value,$currency);
}

浣跨敤鏈湴鍖栫殑璐у竵鏍煎紡鏉ユ牸寮忓寲鏁板瓧銆

formatDecimal() 鏂规硶
public string formatDecimal(mixed $value)
$value mixed 瑕佹牸寮忓寲鐨勬暟瀛
{return} string 鏍煎紡鍖栫粨鏋溿
婧愮爜锛 framework/i18n/CNumberFormatter.php#131 (鏄剧ず)
public function formatDecimal($value)
{
    return 
$this->format($this->_locale->getDecimalFormat(),$value);
}

浣跨敤鏈湴鍖栫殑鍗佽繘鍒舵牸寮忔潵鏍煎紡鍖栨暟瀛椼

formatNumber() 鏂规硶
protected string formatNumber(array $format, mixed $value)
$format array 鏍煎紡鍖栫殑缁撴瀯濡備笅锛
array(
	'decimalDigits'=>2,     // 灏忔暟鐐瑰悗鎵闇瑕佺殑鏁板瓧浣嶆暟锛涘鏋滄病鏈夎冻澶熺殑浣嶆暟灏嗙敤0鏉ュ~鍏咃紱濡傛灉涓-1锛屾剰鍛崇潃鎴戜滑浼氭斁寮冨皬鏁扮偣銆
 'maxDecimalDigits'=>3,  // 灏忔暟鐐瑰悗鏁板瓧鐨勬渶澶т綅鏁般傚鍑烘潵鐨勪綅鏁板皢琚埅鍙栥
	'integerDigits'=>1,     // 灏忔暟鐐瑰悗鎵闇鐨勪綅鏁扮殑鍙风爜锛涘鏋滄病鏈夎冻澶熺殑浣嶆暟灏嗙敤0鏉ュ~鍏呫
	'groupSize1'=>3,        // 涓诲垎缁勭殑澶у皬锛涘鏋滀负0锛屾剰鍛崇潃娌℃湁鍒嗙粍銆
	'groupSize2'=>0,        // 绗簩鍒嗙骇鐨勫ぇ灏忥紱濡傛灉涓0锛屾剰鍛崇潃娌℃湁绗簩鍒嗙粍銆
	'positivePrefix'=>'+',  // 姝f暟鍓嶇紑
	'positiveSuffix'=>'',   // 姝f暟鍚庣紑
	'negativePrefix'=>'(',  // 璐熸暟鍓嶇紑
	'negativeSuffix'=>')',  // 璐熸暟鍚庣紑
	'multiplier'=>1,        // 100涓虹櫨鍒嗘瘮锛1000涓哄崈鍒嗘瘮銆
);
$value mixed 瑕佹牸寮忓寲鐨勬暟瀛
{return} string 鏍煎紡鍖栫粨鏋
婧愮爜锛 framework/i18n/CNumberFormatter.php#157 (鏄剧ず)
protected function formatNumber($format,$value)
{
    
$negative=$value<0;
    
$value=abs($value*$format['multiplier']);
    if(
$format['maxDecimalDigits']>=0)
        
$value=round($value,$format['maxDecimalDigits']);
    
$value="$value";
    if((
$pos=strpos($value,'.'))!==false)
    {
        
$integer=substr($value,0,$pos);
        
$decimal=substr($value,$pos+1);
    }
    else
    {
        
$integer=$value;
        
$decimal='';
    }

    if(
$format['decimalDigits']>strlen($decimal))
        
$decimal=str_pad($decimal,$format['decimalDigits'],'0');
    if(
strlen($decimal)>0)
        
$decimal=$this->_locale->getNumberSymbol('decimal').$decimal;

    
$integer=str_pad($integer,$format['integerDigits'],'0',STR_PAD_LEFT);
    if(
$format['groupSize1']>&& strlen($integer)>$format['groupSize1'])
    {
        
$str1=substr($integer,0,-$format['groupSize1']);
        
$str2=substr($integer,-$format['groupSize1']);
        
$size=$format['groupSize2']>0?$format['groupSize2']:$format['groupSize1'];
        
$str1=str_pad($str1,(int)((strlen($str1)+$size-1)/$size)*$size,' ',STR_PAD_LEFT);
        
$integer=ltrim(implode($this->_locale->getNumberSymbol('group'),str_split($str1,$size))).$this->_locale->getNumberSymbol('group').$str2;
    }

    if(
$negative)
        
$number=$format['negativePrefix'].$integer.$decimal.$format['negativeSuffix'];
    else
        
$number=$format['positivePrefix'].$integer.$decimal.$format['positiveSuffix'];

    return 
strtr($number,array('%'=>$this->_locale->getNumberSymbol('percentSign'),'鈥'=>$this->_locale->getNumberSymbol('perMille')));
}

鍩轰簬涓涓牸寮忔潵鏍煎紡鍖栨暟瀛椼 杩欎釜鏂规硶鍙牸寮忓寲绾暟瀛椼

formatPercentage() 鏂规硶
public string formatPercentage(mixed $value)
$value mixed 瑕佹牸寮忓寲鐨勬暟瀛
{return} string 鏍煎紡鍖栫粨鏋溿
婧愮爜锛 framework/i18n/CNumberFormatter.php#121 (鏄剧ず)
public function formatPercentage($value)
{
    return 
$this->format($this->_locale->getPercentFormat(),$value);
}

浣跨敤鏈湴鍖栫殑鐧惧垎姣旀牸寮忔潵鏍煎紡鍖栨暟瀛椼 娉ㄦ剰锛屽鏋滄牸寮忎腑涓寘鍚%鈥欙紝鏁板瓧棣栧厛闄や互100銆 濡傛灉鏍煎紡涓寘鍚樷扳欙紝鏁板瓧棣栧厛闄や互1000銆

parseFormat() 鏂规硶
protected array parseFormat(string $pattern)
$pattern string 瑕佽В鏋愮殑妯″紡
{return} array 杩斿洖宸茬粡瑙f瀽鐨勬ā寮
婧愮爜锛 framework/i18n/CNumberFormatter.php#204 (鏄剧ず)
protected function parseFormat($pattern)
{
    if(isset(
$this->_formats[$pattern]))
        return 
$this->_formats[$pattern];

    
$format=array();

    
// find out prefix and suffix for positive and negative patterns
    
$patterns=explode(';',$pattern);
    
$format['positivePrefix']=$format['positiveSuffix']=$format['negativePrefix']=$format['negativeSuffix']='';
    if(
preg_match('/^(.*?)[#,\.0]+(.*?)$/',$patterns[0],$matches))
    {
        
$format['positivePrefix']=$matches[1];
        
$format['positiveSuffix']=$matches[2];
    }

    if(isset(
$patterns[1]) && preg_match('/^(.*?)[#,\.0]+(.*?)$/',$patterns[1],$matches))  // with a negative pattern
    
{
        
$format['negativePrefix']=$matches[1];
        
$format['negativeSuffix']=$matches[2];
    }
    else
    {
        
$format['negativePrefix']=$this->_locale->getNumberSymbol('minusSign').$format['positivePrefix'];
        
$format['negativeSuffix']=$format['positiveSuffix'];
    }
    
$pat=$patterns[0];

    
// find out multiplier
    
if(strpos($pat,'%')!==false)
        
$format['multiplier']=100;
    else if(
strpos($pat,'鈥')!==false)
        
$format['multiplier']=1000;
    else
        
$format['multiplier']=1;

    
// find out things about decimal part
    
if(($pos=strpos($pat,'.'))!==false)
    {
        if((
$pos2=strrpos($pat,'0'))>$pos)
            
$format['decimalDigits']=$pos2-$pos;
        else
            
$format['decimalDigits']=0;
        if((
$pos3=strrpos($pat,'#'))>=$pos2)
            
$format['maxDecimalDigits']=$pos3-$pos;
        else
            
$format['maxDecimalDigits']=$format['decimalDigits'];
        
$pat=substr($pat,0,$pos);
    }
    else   
// no decimal part
    
{
        
$format['decimalDigits']=0;
        
$format['maxDecimalDigits']=0;
    }

    
// find out things about integer part
    
$p=str_replace(',','',$pat);
    if((
$pos=strpos($p,'0'))!==false)
        
$format['integerDigits']=strrpos($p,'0')-$pos+1;
    else
        
$format['integerDigits']=0;
    
// find out group sizes. some patterns may have two different group sizes
    
$p=str_replace('#','0',$pat);
    if((
$pos=strrpos($pat,','))!==false)
    {
        
$format['groupSize1']=strrpos($p,'0')-$pos;
        if((
$pos2=strrpos(substr($p,0,$pos),','))!==false)
            
$format['groupSize2']=$pos-$pos2-1;
        else
            
$format['groupSize2']=0;
    }
    else
        
$format['groupSize1']=$format['groupSize2']=0;

    return 
$this->_formats[$pattern]=$format;
}

瑙f瀽鎸囧畾鐨勫瓧绗︿覆妯″紡銆

鍙傝

Copyright © 2008-2011 by Yii Software LLC
All Rights Reserved.