Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Obliczenia, Prosta matematyka a jest błąc
smarcz
post
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 12.05.2005

Ostrzeżenie: (0%)
-----


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
(IMG:http://e-lotnisko.pl/obliczenia.jpg)

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. <? }?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
empathon
post
Post #2





Grupa: Zarejestrowani
Postów: 246
Pomógł: 31
Dołączył: 13.11.2006
Skąd: się znamy?

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
JoShiMa
post
Post #3





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
nevt
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
smarcz
post
Post #5





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 12.05.2005

Ostrzeżenie: (0%)
-----


Tak, round() pomogło Panowie. Serdecznie dzięki za podpowiedzi.
Go to the top of the page
+Quote Post
JoShiMa
post
Post #6





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(smarcz @ 5.06.2008, 13:53:25 ) *
Panowie.

I Panie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 04:45