Страница 1 из 1

Perl людям

Добавлено: 20 фев 2003, 09:41
Tundra
Пиплы, делитесь короткими путями форматирования number в currency.
пример: 32556334 в 32,556,334.00
sprintf() вроде не катит (запятые не расставляет).
Да, модули не предлагать.

regexp?

Добавлено: 20 фев 2003, 10:29
не местный
1111

Добавлено: 20 фев 2003, 22:17
Boo
не супер-пупер коротко, но вроде работает:

Код: Выделить всё

sub make_currency_string {
	local $_ = shift ;
	unshift( @v, $2 )
		while( s/^(.*)(\d{3})$/$1/ ) ;
	$_ && unshift( @v, $_ ) ;
	join( ',', @v ) . ".00" ;
}
кто-нить знает как короче, типа в одну строку?

мои три копейки

Добавлено: 21 фев 2003, 11:57
Смайл
А вот и мой вариант (детерменистский :D )

JavaScript

Код: Выделить всё

function currency(number,dollars)
{
  if(dollars) {
     if(!(number = Math.floor(number))) return ""; 
     var L = currency(number / 1000,true);
     return (L?(L + ","):"") + (number % 1000).toString();
  }
  else {
     var c = (Math.round(number * 100) % 100).toString();
     return currency(number,true) + "." + ((c.length != 1)?c:(c + "0"));
  }
}
тестовая страница: http://terra-informatica.org/test/currency.htm


[/code]

Re: мои три копейки

Добавлено: 21 фев 2003, 12:02
Tundra
Смайл писал(а):А вот и мой вариант (детерменистский :D )

JavaScript

Код: Выделить всё

function currency(number,dollars)
{
  if(dollars) {
     if(!(number = Math.floor(number))) return ""; 
     var L = currency(number / 1000,true);
     return (L?(L + ","):"") + (number % 1000).toString();
  }
  else {
     var c = (Math.round(number * 100) % 100).toString();
     return currency(number,true) + "." + ((c.length != 1)?c:(c + "0"));
  }

}
тестовая страница: http://terra-informatica.org/test/currency.htm


[/code]

С Java/Javascript я думаю нет таких проблем. Дело в том , что у Perl нет даже приблизительных build-in функций - вот и приходится изощрятся.