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褰撳墠鏀寔璐у竵鏍煎紡锛岀櫨鍒嗘瘮鏍煎紡鍜屽崄杩涘埗鏍煎紡锛岃繕鏈夐氱敤鏍煎紡銆 鍓嶄笁绉嶆牸寮忓湪鍖哄煙鏁版嵁閲岄潰鎸囧畾锛 閫氱敤鏍煎紡鍏佽浣犺緭鍏ヤ竴浜涗换鎰忔牸寮忓瓧绗︿覆銆
涓涓牸寮忓寲瀛楃涓插彲浠ョ敱浠ヤ笅鎸囧畾鐨勫瓧绗︾粍鎴愶細
浠讳綍鍛ㄨ竟妯″紡锛堝瓙妯″紡锛変細琚繚鐣
浠ヤ笅鏄竴浜涗緥瀛愶細
CNumberFormatter 灏濊瘯Unicode Technical Standard #35瀹炵幇鏁板瓧鏍煎紡鍖栥 鏈疄鐜颁互涓嬪姛鑳斤細
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']>0 && 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瀽鎸囧畾鐨勫瓧绗︿覆妯″紡銆