Perl людям

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Аватара пользователя
Tundra
Пользователь
Сообщения: 120
Зарегистрирован: 18 фев 2003, 07:36
Откуда: Toronto

Perl людям

Сообщение Tundra »

Пиплы, делитесь короткими путями форматирования number в currency.
пример: 32556334 в 32,556,334.00
sprintf() вроде не катит (запятые не расставляет).
Да, модули не предлагать.
не местный
Пользователь
Сообщения: 110
Зарегистрирован: 20 фев 2003, 07:17
Откуда: оттуда

regexp?

Сообщение не местный »

1111
Boo
Пользователь
Сообщения: 92
Зарегистрирован: 20 фев 2003, 00:41

Сообщение Boo »

не супер-пупер коротко, но вроде работает:

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

sub make_currency_string {
	local $_ = shift ;
	unshift( @v, $2 )
		while( s/^(.*)(\d{3})$/$1/ ) ;
	$_ && unshift( @v, $_ ) ;
	join( ',', @v ) . ".00" ;
}
кто-нить знает как короче, типа в одну строку?
Аватара пользователя
Смайл
Пользователь
Сообщения: 135
Зарегистрирован: 18 фев 2003, 10:38

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

Сообщение Смайл »

А вот и мой вариант (детерменистский :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]
Аватара пользователя
Tundra
Пользователь
Сообщения: 120
Зарегистрирован: 18 фев 2003, 07:36
Откуда: Toronto

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

Сообщение 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 функций - вот и приходится изощрятся.
Ответить