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

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: 15.09.2025 - 15:42