Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > формула в запрос


Автор: bars80080 7.5.2009, 17:09
товарищи, есть таблица с такими полями: tarif float(12,2), komm float(12,2)

требуемо обновить значения в ней одним запросом по следующей формуле: komm = tarif * $procent, где $procent - число типа 0,037
проблема в округлении. вопрос таков - округлит ли до двух знаков mysql число по правилам?

если да, то верен ли запрос:

Код

'... set komm=tarif*'.$procent.' where ...';

Автор: gta4kv 7.5.2009, 17:37
А не легче это просто протестировать?

Автор: bars80080 7.5.2009, 18:35
да это я просто в запарке был. помятуя о случае, когда долго боролся с replace то и запостил вопрос, чтоб если что
но, из-за того что в город вводят войска, конец рабочего дня сместили и всё-таки переместили решение задачи на завтра

Автор: solenko 8.5.2009, 09:24
http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_round по религиозным причинам отпадает? )

Автор: bars80080 8.5.2009, 10:30
нет, совешенно не отпадает. религия ждёт откровения

собсна, может round и подошла бы, ибо
Код

select round(3445*0.045, 2)

даёт 155.03

однако в запросе обновления:
Код

update `table` set `pcom`=4.5, `komm`=round(tarif*0.045, 2), `selpcom`=0 where blanc=20 and datesale>1241125200 and datesale<1241816399 and ak=143

получаем в итоге 155.02
по факту, такой результат я получаю и без использования round, т.к. ячейка komm - float(12,2) и там автоматом округляется

вот такие вот пироги

Автор: ksnk 8.5.2009, 10:36
bars80080, Дела денежные, imho, требуют целочисленной арифметики. Правильнее держать деньги не в float'е, нарываясь на странные и непредсказуемые округления, а в целых (копейках, центах). Да и бухгалтерские округления иногда отличаются от арифметических...

Автор: bars80080 8.5.2009, 11:37
ну, в этом ключе можно далеко зайти. остатки от деления копеек тоже ведь куда-то должны деваться? получается можно и обогатиться.
впрочем, я не банковскую прогу пишу, а отчётность. в крайнем случае, все нестыковки можно утрясти через взаимные претензии.

считать просто удобнее. однако, возьмём на заметку для будущих свершений

Автор: ksnk 8.5.2009, 14:50
bars80080, Ну да. К примеру, товар в корзинку грузит покупатель. Нагрузил 10 наименований и выписывает счет.
НДС с суммы  сделки - 18% магазин обязан выплатить государству. А можно начислять НДС не с суммы сделки, а с каждого товара по отдельности, а потом их всех суммировать. Таким образом, появляется элегантная возможность использовать цены вида "1 рупь 97 копеек" для вполне законного обувания государства.

1.97*0.18 ~ 35 копеек, в то время как 1.98*0.18 = ~ уже 36 копеек. Если купить 10 таких товаров, то по одной схеме расчета получится
НДС(10*1.97)=3.55 руб, по другой формуле 10*(НДС(1.97))=3.50 руб. 5 копеек с ~20 рублёвой сделки - чистая и необлагаемая налогом прибыль предприятия smile

Впрочем, такие финты уже давно описаны в бухгалтерских документах. Бухгалтерия - штука точная...  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)