Article View: pl.comp.lang.php
Article #231113Re: Problem z właściwym sumowaniem
From: artiun
Date: Tue, 14 Jul 2015 14:01
Date: Tue, 14 Jul 2015 14:01
85 lines
3727 bytes
3727 bytes
W dniu 2015-07-14 o 09:56, tomek pisze: > Użytkownik "Borys Pogoreło" <borys@pl.edu.leszno> napisał w wiadomości > news:12ptonkwkgs46.11ond3800czpd$.dlg@40tude.net... >> 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. > > PHP to nie C czy inny język. > Jak się pomnoży np > $x = 0.23 * $kwota_w_groszach > to i tak to będzie FLOAT a nie INTEGER. > > Funkcja "round" też zwraca float. > > Chodzi mi oto aby nie było takich numerów jak poniżej > --------------------------------------------------------------- > $NL = "\n"; > > $x1 = 0.2; > $x2 = 0.12; > $x3 = 0.08; > > // teoretycznie to samo ale daje inne wyniki > $x = $x1 - $x2 - $x3; > echo $x.$NL; > $x = -$x2 - $x3 + $x1; > echo $x.$NL; > > -------------------------------------------------------------------- > 1.3877787807814E-17 > 0 > Może język inny, ale rzutowanie jest (on pisał o operacjach na int): <?php $NL = "\n"; $x1 = 0.2; $x2 = 0.12; $x3 = 0.08; $x = (int)($x1*100) - (int)($x2*100) - (int)($x3*100); echo $x.$NL; $x = -$x2 - $x3 + $x1; echo $x.$NL; ?> WYNIK TEN SAM. Przykład wcześniejszy: $x = 0.23 * $kwota_w_groszach <?php $NL = "\n"; $kwota_w_groszach = 177777; $x = 0.23 * $kwota_w_groszach; echo gettype( $x ).$NL; // Takie liczenie było by złe echo gettype( (int)$x ).$NL; // To nie jest float, nie ma to znaczenia bo po przecinku są same zera echo gettype( round( $x.$NL, 0 ) ).$NL; ?> -- Artur
Technical Details
Message-ID:
<55a5164e$0$8389$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!takemy.news.telefonica.de!telefonica.de!feeder2.ecngs.de!ecngs!feeder.ecngs.de!81.171.118.63.MISMATCH!peer03.fr7!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-01.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> <55a4c0bf$0$8368$65785112@news.neostrada.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!takemy.news.telefonica.de!telefonica.de!feeder2.ecngs.de!ecngs!feeder.ecngs.de!81.171.118.63.MISMATCH!peer03.fr7!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail Date: Tue, 14 Jul 2015 16:01:38 +0200 From: artiun <artiun@spam.wp.pl> User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; pl-PL; rv:1.8.1.3) Gecko/20070326 Thunderbird/2.0.0.0 Mnenhy/0.7.5.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> <55a4c0bf$0$8368$65785112@news.neostrada.pl> In-Reply-To: <55a4c0bf$0$8368$65785112@news.neostrada.pl> Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAQMAAABtzGvEAAAAFXRFWHRDcmVhdGlvbiBUaW1l AAfVBwEUExQxoOF6AAAAB3RJTUUH1QcBFCMjg1qR9gAAAAlwSFlzAAAK8AAACvABQqw0mAAAAAZQ TFRFAAAA////pdmf3QAAAHZJREFUeNpj+A8GDFSjHoOpf8xg6oA8iPrHAJb7wQ+mPtSDqYcQDc+f I1MPW/hB1AMGMPWDGSTY+F+ujvk/QwOjAQ8DP8MBBgEWBkaGj//kVP6z43AEM4QCGtIPpBoYGOfU M/x//IFxDkTJHghVC6F+U9HvQAAATjr8CsUXDxIAAAAASUVORK5CYII= X-Antivirus: avast! (VPS 150714-0, 2015-07-14), Outbound message X-Antivirus-Status: Clean Lines: 85 Message-ID: <55a5164e$0$8389$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: 83.22.80.73 X-Trace: 1436882510 unt-rea-b-01.news.neostrada.pl 8389 83.22.80.73:8144 X-Complaints-To: abuse@news.neostrada.pl X-Received-Bytes: 3463 X-Received-Body-CRC: 4251524619 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit