webmaster webmastering webdesign

Jesteś tutaj: webmade.org >> porady >> php + mysql

Formatowanie długich liczb

autor: Patryk 'yarpo' Jar, ostatnia modyfikacja: 2008-01-07

szukaj: formatowanie długich liczb formatowanie długich liczb PHP PHP

Czasem na stronie musimy wyświetlić jakieś długie liczby. Jednak liczba w stylu 10000102231202 jest bardzo mało czytelna. Trochę lepiej wygląda: 10 000 102 231 202, prawda? Skoro wygląda to lepiej, to czemu by nie zrobić tego lepiej :)

Oto klasa załatwiająca sprawę:

<?PHP
/* autor Patryk yarpo Jar yarpo at poczta.onet.pl last-mod: 7XII07 */
class number {
	protected $length;
	protected $str;
	protected $str_with_gaps;
	protected $modulo;
	protected $char;

function __construct($n)
{
	if (!is_string($n))
		$this->str = strval($n);
	else
		$this->str = $n;
	$this->length = strlen($this->str)-1;
	$this->modulo = 3;
	$this->char = ' ';
}

private function reverse($str) 
{
	$this->str_with_gaps = "";
	$n = strlen($str); 
	while($n--)
		$this->str_with_gaps .= $str[$n];
}

private function change_mod($n) 
{
	$this->modulo = $n;
}

private function change_char($c) 
{
	$this->char = $c;
}

private function make_gaps() 
{
	$tmp = "";
	for ($i=0; $i <= $this->length; $i++) {
		if ( !($i % $this->modulo) && $i)
			$tmp .= $this->char;
		$tmp .=  $this->str[$this->length-$i];
	}
	$this->reverse($tmp);
}

public function get_length()
{
	return $this->length;
}

public function get_number($mod=3, $char=" ")
{
	if ($mod != $this->modulo)
		$this->change_mod($mod);
	if ($char != $this->char)
		$this->change_char($char);
	$this->make_gaps();
return $this->str_with_gaps;
}
}; // end class
?>

Jak z niego skorzystać? Oto przykład:

$liczba = "1000";
$o_liczba = new number($liczba);
echo 'Powinno być 1#000, a jest: ' . $o_liczba->get_number(3, '#').'<br />';
echo 'Powinno być 1,000, a jest: ' . $o_liczba->get_number(3, ",").'<br />';
echo 'Powinno być 10.00, a jest: ' . $o_liczba->get_number(2, ".").'<br />';

Jak widać, kod długi, ale działanie bardzo proste :)

Pisząc tą klasę nie byłem świadomy istnienia już podobnej funkcji w PHP jednak porada zostaje do celów edukacyjnych :)

Wszelkie uwagi co do działania klasy można zgłaszać na forum.

Patryk 'yarpo' Jar

Osoby czytające tę publikację przeglądały również:

Chcesz zostać programistą?

Poznaj 6 kroków do efektywnej
nauki programowania!

 

valid XHTML
valid CSS
© 2004-2008 copyright by webmade.org