Skocz do zawartości

Problem z sumowaniem php


czaj

Rekomendowane odpowiedzi

Witam

Mam taki problem.

Mam liczby zapisane w bazie mysql w osobnych rekordach. Przykładowo 123.45 ; 23.56 ; -123.45 ; -23.56

Komórka tablicy do przechowywania tych wartości jest ustawiona jako decimal(10,2)

Pobieram te dane z bazy tak:

$wykonaj = mysql_query("SELECT * FROM `tabela` WHERE `id` = 'sasa' ");
while ($wynik = mysql_fetch_array($wykonaj)){
$suma += $wynik['liczba'];
};
echo $suma

I tutaj zaczyna się problem

Przy takich wartościach pobieranych z bazy (123.45 ; 23.56 ; -123.45 ; -23.56) zmienna $suma powinna dać 0.00 a daje wynik 3.14124312323423423 :(

Dodam że jak sumuje wartości które nie dają zera (123.45 ; 23.56 ; -123.45) to wynik jest prawidłowy.

Ktoś wie o co chodzi??

PZDR

Odnośnik do komentarza
Udostępnij na innych stronach

a nie lepiej sumować już na poziomie mysql? i w php mieć gotowy wynik?

wtedy masz coś takiego: select sum(liczba) as sumka FROM tabela WHERE id = coś tam

Moje staruszki po liftingu, darmowe, zgodne z wytycznymi G, responsywne!

Katalog stron firm Zorb -/- Katalog sklepów Świat Zakupów -/- Katalog firm ProBi. PS Nie łatwo się dodać. ;)

A jeśli lubisz technologię, zwłaszcza bezzałogowce, to w wolnej chwili zajrzyj na InfoDron - info.dron.pl

Odnośnik do komentarza
Udostępnij na innych stronach

Stałoprzecinkowe powinno się traktować w językach programowania jako int-y, no chyba, że nie ważne są błędy zaokrągleń, tzn. 10000.10-9000.10 może się równać na przykład 999.981182711. Bo zawsze będziesz miał błędy, jeśli będziesz używał zmiennoprzecinkowych zamiast stałoprzecinkowych w C++ czy PHP. W mysql-u robisz SELECT liczba * 100 as ...

w PHP przy końcowym wyniku robisz /100, lub (lepiej)

$d = liczba%100;

$d = ($d<=9 ? "0".$d : $d);

$liczba = (floor(liczba/100)).'.'.$d;

To chyba do sklepu... mam nadzieję, że nie planujesz w PHP na zmiennym przecinku obliczać na przykład VAT-u :(

Odnośnik do komentarza
Udostępnij na innych stronach

Jeszcze inaczej, bardziej "pro" ;-)

Po pierwsze: https://pl.php.net/manual/en/ref.bc.php

Po drugie:

$suma = 0;
$wykonaj = mysql_query("SELECT * FROM `tabela` WHERE `id` = 'sasa' ");
while ($wynik = mysql_fetch_array($wykonaj))
{
$suma = bcadd($suma, $wynik['liczba'], 2);
}
echo $suma;

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności