🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.php
Article #231104

Re: Problem z właściwym sumowaniem

#231104
From: Kviat
Date: Tue, 14 Jul 2015 00:19
55 lines
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-mail
References: <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