Article View: pl.comp.lang.php
Article #231104Re: Problem z właściwym sumowaniem
From: Kviat
Date: Tue, 14 Jul 2015 00:19
Date: Tue, 14 Jul 2015 00:19
55 lines
3045 bytes
3045 bytes
W dniu 2015-07-14 o 00:51, Borys Pogoreło pisze: > Dnia Mon, 13 Jul 2015 12:11:53 +0200, tomek napisał(a): > >> SELECT [...] >> CAST(100 * kwota_w_zl AS SIGNED) AS kwota_w_gr, >> [...] >> >> Wszystkie operacje wykonuję na groszach. >> Dopiero na samym końcu gdy wynik idzie do wyświetlania zaminiany jest na >> stringa > > A jak sobie radzisz z mnożeniem? Bo na 32-bitowych maszynach PHP_INT_MAX > wcale taki duży nie jest. A wynik mnożenia większych liczb może dość łatwo > przekroczyć 2147483647, jeśli oba czynniki masz pomnożone przez 100. Hmmmm.... 46340,95 x 46340,95 = 2147483647 46340 (463,40 zł?) x 46340 (np.kg?) = 2147395600 (21473956,00 zł) Załóżmy, że to węgiel... 1 t = ok 600 zł 600 zł x 100 = 60000 1 t x 100 = 100 2147483647/60000 = ok. 35791 35791/100 = 357,91 ton Wagon to ok 60 ton, czyli to ok. 6 wagonów węgla Jeżeli przez 100 mnożymy tylko cenę, to w ten sposób możemy mieć ok. 600 wagonów węgla Nie to żebym się czepiał (węgiel wybrałem żeby "przerysować"), ale ktoś kto wystawia takie faktury (albo robi obroty na poziomie 2147483647/100 = 21474836,47 zł - 21,5 mln zł) to raczej php nie używa do wystawiania faktur czy ewidencjonowania sprzedaży (no chyba, że się mylę...) Czy mógłbyś podać jakiś przykład (taki z życia), przy którym można się obawiać przekroczenia zakresu? Pralka, ok. 1000 zł 1000 zł x 100 = 100000 2147483647/100000 = ok.21474 pralek Nawet jeżeli to podzielimy przez 100, to = ok. 215 pralek... Czyli 215 (albo 21500 jeżeli mnożymy tylko cenę) pozycji na fakturze po 1000 zł... Nie wiem... ale wydaje mi się, że jest mało prawdopodobne, że przeciętny użytkownik takiego programu w php przekroczyłby zakres... (Rozważam czysto teoretycznie, sam nie mnożę cen przez 100 jak mam coś do policzenia kwotowo, ale też nie jest to program do fakturowania ;)) Pozdrawiam Piotr
Technical Details
Message-ID:
<55a4558c$0$8390$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<9ecf2928-3e4b-4d12-8383-9217f3a32d17@googlegroups.com> <55a38ee3$0$2188$65785112@news.neostrada.pl> <12ptonkwkgs46.11ond3800czpd$.dlg@40tude.net>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail Date: Tue, 14 Jul 2015 02:19:28 +0200 From: Kviat <kviat@NIE_DLA_SPAMUneostrada.pl> User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 Newsgroups: pl.comp.lang.php Subject: Re: Problem z właściwym sumowaniem References: <9ecf2928-3e4b-4d12-8383-9217f3a32d17@googlegroups.com> <55a38ee3$0$2188$65785112@news.neostrada.pl> <12ptonkwkgs46.11ond3800czpd$.dlg@40tude.net> In-Reply-To: <12ptonkwkgs46.11ond3800czpd$.dlg@40tude.net> Lines: 55 Message-ID: <55a4558c$0$8390$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: 89-64-53-136.dynamic.chello.pl X-Trace: 1436833165 unt-rea-b-01.news.neostrada.pl 8390 89.64.53.136:15093 X-Complaints-To: abuse@news.neostrada.pl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit