LINUX.ORG.RU

Выйди покурить, обдумай вопрос как следует, сформулируй его на человеческом языке и задай заново.

Anoxemian ★★★★★
()

prldoc perlfunc

/sprintf /printf

anonymous
()
Ответ на: комментарий от elipse

Web-приложение:
- форма ввода данных с неизвестным кол-вом полей ввода и типом данных;
- SQL;
- итоги по документу и разным организациям, вычисление внутри шаблона;
- в шаблоне template-toolkit (файл *.tt) подставляются результаты.

Кол-во этих ячеек может быть любое, иногда до 200.
Есть написанные функции в template-toolkit, выводящие результат
в нужном виде: money - XXX.XX, money3r - XXX.XXX, moneyint - XXX.

Ранее вставлял money() только для вычисляемых полей, нужно оказывается
вообще для всех полей вставлять функции (100 файлов * X полей) :)

Хранимые поля можно привести к нужному виду на этапе ввода через
Javascript, вычисляемые поля прогнать через money().

Трудоемкость...





WinLin
() автор топика

Хранить деньги в вещественном типе - это мудро, да.)

sergej ★★★★★
()
Ответ на: комментарий от WinLin

> money - XXX.XX

sub money($) { sprintf '%6.2f', shift }

> money3r - XXX.XXX

sub money3r($) { sprintf '%7.3f', shift }

> moneyint - XXX.

sub moneyint($) { sprintf '%d.', int .5 + shift }

как верно сказал анонимус — детский сад вторая четверть…

arsi ★★★★★
()
Ответ на: комментарий от arsi

use bigint;
Миллиарды пока не считали.

Я не говорил, что считали только «руб.копейки»,
есть и «0.XXX тыс.рублей»,«XXX тыс. рублей»,«XXX штук»,«просто текст».

Числа могут иметь любой формат.

В имени переменной придется кодировать формат,
что сейчас и сделано для текстовых.

WinLin
() автор топика
Ответ на: комментарий от arsi

> sub moneyint($) { sprintf '%d.', int .5 + shift }
153.65 => 153

sub moneyint($) { ceil(shift) }
153.65 => 154

Детский сад, какая там четверть?

WinLin
() автор топика
Ответ на: комментарий от WinLin

use integer;
use bigint;

Храним все в int.
При выводе преобразовываем с помощью функций.

А если число не хранится в базе, а вычисляется и оно дробное,
и от него вычисляются другие числа?

Засада называется.

WinLin
() автор топика
Ответ на: комментарий от WinLin

>есть и «0.XXX тыс.рублей»,«XXX тыс. рублей»,«XXX штук»
в БД надо хранить всё в одном формате.

,«просто текст».

тут вообще непонятно. в БД в числовом поле хранится текст?
вам стоит всерьез задуматься, чтобы разделить программу на две))
а то получается и швец, и жнец, и на дуде игрец...
я, конечно, понимаю, что у тебя данные feature2 прекрасно умещаются в данные feature1, но это не повод объединять их в одну (таблицу) БД.
никому не взбредет в голову в БД склада объединять данные о клиентах и овощах в оду таблицу (хотя бывает, что это одно и то же).

В имени переменной придется кодировать формат,

пипец.

xydo ★★
()
Ответ на: комментарий от WinLin

Да, чувак. Ты даже хуже, чем быдлокодер. Ты неадекватный, упертый и тупой быдлокодер, не осознающий своей быдлокодерской сущности. Мне очень жаль тех несчастных, кто будет пользоваться твоим говнокодом.

anonymous
()

И предлагаю всяким дуракам и отморозкам задуматься, почему в архитектуре x86 есть даже специальный набор инструкций для работы с decimal.

anonymous
()
Ответ на: комментарий от WinLin

> Храним все в int.

так и обрабатывайте как int, в чём проблемы?

> А если число не хранится в базе, а вычисляется и оно дробное, и от него вычисляются другие числа?

и что?

> Засада называется.

угу, и она в полном незнании и непонимании работы fpu…

$ gcc -include stdio.h -x c -o /tmp/ttt - <<<'int main(){return printf("%.16lf\n",318.16);}'
$ /tmp/ttt
318.1600000000000250

arsi ★★★★★
()
Ответ на: комментарий от WinLin

Имена переменных шикарные. Быдлокодер, такой быдлокодер. Когда же наконец разрешат вас всех расстреливать?!?

anonymous
()

И кстати, fixed point тоже для слабаков и дураков. Единственный кошерный путь - infinite precision rational arithmetic.

А тебе, быдлокодер, остается только пожелать, чтобы твою зарплату и твой счет в банке обслуживал код, написанный таким же уродом, как ты.

anonymous
()
Ответ на: комментарий от anonymous

Алле, гараж!

Это переменные из сотого шаблона.
Какую нужно иметь фантазию, чтобы называть осмысленно
по 200 переменных в каждом шаблоне.
Хотя некоторые переменные можно осмысленно назвать.

Это вообще-то не программа,
а шаблон (файл *.tt) делается в Calc и конвертируется в html.

WinLin
() автор топика
Ответ на: комментарий от WinLin

Еще раз для особо одаренных anonymous,
логика хранения/извлечения данных
не переписывается под каждый файл
и подходит для хранения любой информации.

WinLin
() автор топика
Ответ на: комментарий от WinLin

Да... Быдлокодер так и не понял, что он быдлокодер. Шаблон, шмаблон - какая разница? Ты облажался. Инструмент выбрал такой, что сложно не облажаться? Тогда ты трижды облажался. Повторяю для особо тупых и отмороженных - таких как ты нельзя близко подпускать к программированию. По одной простой причине - такие упертые отморозки не способны учиться на ошибках. Такие ублюдки ошибки свои наоборот защищают.

anonymous
()
Ответ на: комментарий от WinLin

Тебя только что рыльцем ткнули в то, что она на самом деле ни хера не подходит для «любой» информации. Ты не только тупой, но ещё и слепой, да?

anonymous
()
Ответ на: комментарий от anonymous

> И кстати, fixed point тоже для слабаков и дураков. Единственный кошерный путь - infinite precision rational arithmetic.

С чего ты взял, что количество денег - всегда рационально? В финансовых расчетах вполне могут возникнуть иррациональные числа. Например, сложный процент от одного рубля за полгода со ставкой 13% - 1.063014581273464940799912191492931422197...

«Единственный кошерный путь» существует только в воображении джуниоров, обчитавшихся Макконело-подобным шлаком. Но на данный момент наилучший способ представления для финансовых расчетов - это continued fraction. Он описан даже в литературе для начинающих - в SICP, например.

Perl, как диалект Lisp, вполне подходит для этой задачи. Как и любой другой язык с замыканиями. Если ты не знаешь как им пользоваться - слушай лекции, бери уроки программирования.

Троллить на ЛОРе тебе явно рано - закончи школу, вуз и поработай 4-5 лет в IT для начала.

anonymous
()
Ответ на: комментарий от WinLin

>Ты сердишься, значит ты не прав :)
паранойя

xydo ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.