Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Złe zaokrąglanie, Funkcja round() wyczynia cuda.
msulik
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 0
Dołączył: 31.03.2002
Skąd: Toruń

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


Witam. Nie siedzę w bugach php ani innych takich wynalazkach, więc może robię wiele hałasu o nic.

Mianowicie mamy sobie liczbę netto * vat = brutto, tzn 371.311475 * 1.22 = 452.9999995 (szesc dziewiatek i piątka). Zaokrąglenie do 6 miejsc po przecinku powinno dac 453. I tak sie prawie dzieje:
  1. <?php
  2. echo round(452.9999995, 6); // Daje 453
  3.  
  4. // Ale juz np.
  5. echo round(371.311475 * 1.22, 6);
  6. // powinno dawac teoretycznie to samo, czyz nie?
  7.  
  8. // Czesciowe rozwiazanie tego problemu, to dodanie 001 na koncu liczby netto:
  9. echo round(371.311475001 * 1.22, 6); // i teraz jest ok - daje 453
  10. ?>


Podobny problem z tymi zerami na koncu mam w MySQL:
  1. SELECT round(371.311475 * 1.22, 6), round(371.311475000001 * 1.22, 6)

To daje nam:
452.999999 | 453

Na chlopski rozum to bez sensu. W szkole uczyli mnie, że jak się zaokrągla do N miejsc po przecinku, to patrzy się nie dalej jak N+1.

Czy ktos moze mi to wyjasnic jak pastuch krowie? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Marusz
post
Post #2





Grupa: Zarejestrowani
Postów: 191
Pomógł: 0
Dołączył: 16.05.2003
Skąd: POLAND

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


No dobra... ale co powiecie na to:
  1. <?php
  2.  
  3. $vA = 452.9999995;
  4. $vB = 371.311475;
  5. $vV = 1.22;
  6.  
  7. $vZ = $vB*$vV;
  8.  
  9. echo $vA . "n";
  10. echo $vZ . "n";
  11.  
  12. if ( $vA == $vZ )
  13. {
  14.  
  15. echo "OKn";
  16.  
  17. }
  18. else 
  19. {
  20.  
  21. echo "AMOKn";
  22.  
  23. }
  24.  
  25. ?>


Output:
Cytat
452.9999995
452.9999995
AMOK


Ten post edytował Marusz 26.08.2005, 00:24:57
Go to the top of the page
+Quote Post

Posty w temacie


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: 11.10.2025 - 10:18