Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Obliczenia
Forum PHP.pl > Forum > Przedszkole
smarcz
Witam. Mam problem z prostą matematyką. Otóż dzieje się coś takiego, że jak odejmuję liczbę 93-93 otrzymuję zamiast 0 coś takiego: -2.84217094304E-014

Dlaczego??

Zobrazowanie


a to mój kod:
nagłowek ->
  1. <?php
  2. $zapytaj = "SELECT sum(kwota) as kwota FROM `ksiegowosc` WHERE typ_transakcji = 'wyplata'";
  3. $result = mysql_query($zapytaj);
  4. $query_data = mysql_fetch_array($result);
  5. $suma_wyplat  = $query_data["kwota"];
  6.  
  7.  
  8. $zapytaj = "SELECT sum(kwota) as kwota FROM `ksiegowosc` WHERE typ_transakcji = 'wplata'";
  9. $result = mysql_query($zapytaj);
  10. $query_data = mysql_fetch_array($result);
  11. $suma_wplat  = $query_data["kwota"];
  12.  
  13. $zapytaj = "SELECT sum(kwota) as kwota FROM `ksiegowosc` WHERE typ_transakcji = 'sprzedaz'";
  14. $result = mysql_query($zapytaj);
  15. $query_data = mysql_fetch_array($result);
  16. $sprzedaz  = $query_data["kwota"];
  17.  
  18. $gotowka = ($sprzedaz + $suma_wplat) - $suma_wyplat;
  19. ?>


reszta która oblicza:
  1. <table border="1">
  2. <tr>
  3. <td align="center">Lp.</td>
  4. <td align="right">Kwota przeprowadzonej operacji [PLN]</td>
  5. <td>Saldo po transakcji</td>
  6. <td>Rodzaj przeprowadzonej operacji</td>
  7. <td>Data operacji</td>
  8. <td>Szczegóły</td>
  9. </tr>
  10. <?
  11. $zapytaj1 = "SELECT id_operacji, kwota, typ_transakcji, numer_transakcji, data FROM `ksi
    egowosc` ORDER BY id_operacji DESC"
    ;
  12. $result1 = mysql_query($zapytaj1);
  13. //echo("$zapytaj<br>");
  14. //if(empty($result)) error_message('Nie ma takiej kategorii');
  15. //if(!$result) error_message('Nie odnaleziono zapytania');
  16. while($query_data = mysql_fetch_array($result1)){
  17. $id  = $query_data["id_operacji"];
  18. $kwota = $query_data["kwota"];
  19. $typ = $query_data["typ_transakcji"];
  20. $numer = $query_data["numer_transakcji"];
  21. $data  = $query_data["data"];
  22.  
  23. $lp++;
  24. ?>
  25. <tr onmouseover="this.bgColor='#efefef'" onmouseout="this.bgColor=''" bgcolor="">
  26. <td align="center"><?=$lp;?></td>
  27. <td align="right"><font color="<?if($typ=="sprzedaz"){ echo("lime");} if($typ=="wyplata"){echo("red");}?>"><strong><?if($typ=="wyplata"){echo("- ");}else{echo("+ ");}?><?=$kwota;?></strong></font> PLN</td>
  28. <td align="right"><?if($lp==1){$saldo = $gotowka;} echo("$saldo PLN"); if($typ=="wyplata"){ echo("+$kwota"); $saldo+=$kwota; }else{echo("- $kwota"); $saldo-=$kwota;} echo(" = "); echo($saldo);?></td>
  29. <td align="center"><?=$typ;?></td>
  30. <td><?=$data;?></td>
  31. <td><a href="<?=$numer;?>">szczegóły</a></td>
  32. </tr>
  33. <? }?>
empathon
Ojoj ale namieszałeś. Trudno to się analizuje. Na pierwszy, drugi i trzeci rzut oka nie widzę błędu.
Mam propozycję. Oblicz wartości przed wstawieniem ich w tabele. Prześledź zmiany wszystkich zmiennych.
JoShiMa
Normalny numeryczny artefakt typowy dla odejmowania dużych wartości zmiennoprzecinkowych od siebie. Możesz przyjąć, że 1*10-14 to jest właściwie zero i zaokrąglać.
nevt
dokładnie jak napisał poprzednik. skoro to są operacje walutowe, to zaokraglaj kazdy wynik do dwóch miejsc znaczących po przecinku (np. funkcja round()) i problem zniknie... no i poczytaj w manualu o funkcji sprintf() - bo używasz mnóstwa niepotrzebnego kodu żeby sformatować wyniki do wyświetlenia ... powodzenia.
smarcz
Tak, round() pomogło Panowie. Serdecznie dzięki za podpowiedzi.
JoShiMa
Cytat(smarcz @ 5.06.2008, 13:53:25 ) *
Panowie.

I Panie tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.