Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разделить тысячи в числах 
:(
    Опции темы
cybear
Дата 14.7.2006, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.11.2004
Где: Tallinn, Estonia

Репутация: нет
Всего: нет



Как бы вы предложили наиболее эффективно добавить во все печатаемые числа разделитель тысяч. То есть выводить в формате 100'000'000.00 USD к примеру ;) 
PM MAIL WWW ICQ MSN   Вверх
cybear
Дата 14.7.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 20.11.2004
Где: Tallinn, Estonia

Репутация: нет
Всего: нет



если кому надо еще - вот отличный модуль http://search.cpan.org/~wrw/Number-Format-1.51/Format.pm

насчет эффективности пока неуверен правда 
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 16.7.2006, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Я делаю это всегда вручную. Посмотри такой код.
Код
#!/usr/bin/perl
use strict;

my $sum = 10000000000;

sub deel {
    my $num = reverse(shift);
    my $char = shift || ".";
    $num =~ s/(\d{3})/$1$char/g;
    return reverse($num);
}

print "Before: $sum\n";
print "After: " . deel($sum) . "\n";
print "After with second parameter: " . deel($sum,"'") . "\n";
 


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
PerlMaster
Дата 16.7.2006, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 16.7.2006

Репутация: нет
Всего: нет



А у меня такая функция для форматирования чисел.
$decimals - кол-во знаков после запятой (точки)
$separator - разделитель тысяч

Код

sub    format_digits {
    my ($value, $decimals, $separator)=@_;
    my $tmp = sprintf("%0.$decimals"."f", $value);
    if ($tmp=~m/^(\d+?)((?:\d{3})*)(\.\d*?)?$/) {
        my ($prefix, $middle, $float) = ($1,$2,$3);
        $middle=~s/(\d{3})/"$separator$1"/ge;
        return "$prefix$middle$float";
    } else {
        return $tmp;
    }
}

 
PM MAIL   Вверх
korob2001
Дата 17.7.2006, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Немного подправил твой пример, так как получал предупреждение если число было целым и передавал в качестве второго значения 0, т.е. отказывался от части после десятичтоной точки.
Код

#!/usr/bin/perl

my $num = 1000;

sub format_digits {
    my($value, $decimals, $separator) = @_;
    my $tmp = sprintf("%0.${decimals}f", $value);
    if (my ($prefix, $middle, $float) = $tmp=~m/^(\d+?)((?:\d{3})*)(\.\d*?)?$/) {
        $middle =~ s/(\d{3})/$separator$1/g;
        return $float ? join("",$prefix,$middle,$float) : join("",$prefix,$middle);
    } else {
        return $tmp;
    }
}

print format_digits($num,0,',');

PS: Сейчас вроде верно работает. 


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.