Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zaokrąglanie inaczej...
Forum PHP.pl > Forum > PHP
netvalue
Witam,

Mam problem z zaokraglaniem PHP, przykladowa sytuacja wyglada tak
  1. $x = 100;
  2. $y = 5.2030;
  3.  
  4. $result = $x / $y; // daje nam 19.2196
  5. $result = round ($result, 2); // daje nam 19.22


i teraz

  1. $result2 = $result * $y; // daje nam 99.8976
  2. $result2 = round($result2,2); // daje nam 99.99


Programowo wszystko zaokrągla dobrze... aczkolwiek ja potrzebuje aby wynik koncowy zmiennej $result2 dawal zawsze wartość $x
kombinuje juz dluzszy czas ale jakos nie moge nic drgnac... prosze o pomoc
StrefaPi
http://pl1.php.net/manual/en/function.ceil.php ??
netvalue
ale w przypadku gdy mamy np.

$x = 58;
$y = 4.1000;

ceil odpada.. bo jesli wystepuja rzeczywiscie jakies liczby po przecinku to musza zostac
StrefaPi
to może nie zaokrąglaj $result ??

a tak dokładniej do czego to ma służyć?
netvalue
to nic nie da bo
  1. $result = 19.2196
  2.  
  3. $result2 = $result * $y // daje 99.9995 ... a ja musze miec tyle co $x czyli 100
StrefaPi
zwiększ dokładność obliczeń w php.ini, a u mnie Twój kod działa prawidłowo, czyli przynajmniej tak jak mówisz daje mi w wyniku 100 [chociaż nie wiem do czego to ma służyć, bo tak to łatwiej byłoby] ;)

a tak poza tym zaokrąglenie round(19.2196, 2) daje 19.22 a nie 19.20 ;)

wtedy 19,22 * 5,2030 = 100,00166
netvalue
tak u gory pomylka nastapila z mojej strony...
ale
np. wezmy przykad

$x = 100;
$y = 4.2030;

i tu jest lipa sad.gif
StrefaPi
Kod
$x = 100;
$y = 4.2030;

$result = $x / $y;

$result2 = $result * $y;
$result2 = round($result2, 2);


a czy tak nie działa? bo mi liczy prawidłowo ;)

http://www.php.net/manual/en/ini.core.php#ini.precision
Crozin
Liczby zmiennoprzecinkowe działają na przybliżeniach i w trakcie operacji na nich niemal zawsze tracimy precyzję i dokładność obliczeń.
1. Lektura obowiązkowa: http://www.cygnus-software.com/papers/comp...aringfloats.htm
2. Lektura nieobowiązkowa: http://docs.oracle.com/cd/E19957-01/806-35...g_goldberg.html
3. Rozwiązanie problemu: https://www.google.com/search?q=php+arbitra...me&ie=UTF-8 --> http://php.net/manual/en/book.bc.php
netvalue
tak u mnie byla skopana konfiuracja dzieki !
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.