Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> php odejmowanie, dziwne wyniki
szajens
post 30.12.2013, 23:56:01
Post #1





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


Więc mamy taki kod:)
  1. <?php
  2. echo 3.001-3;
  3. ?>


lub taki:

  1. <?php
  2. echo 3.001-3.000;
  3. ?>


Który daje wynik: 0.00099999999999989

niezależnie od serwera logiczne jest że wynik powinien być 0.001

zauważyłem że dzieje się tak tylko z małymi wynikami

Pytanie brzmi: jaka jest przyczyna?

Ten post edytował szajens 30.12.2013, 23:56:29
Go to the top of the page
+Quote Post
rad11
post 31.12.2013, 00:15:48
Post #2





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

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


Przyczyna nie znam ale w google mozesz znalesc tak mi sie wydaje ale gdy zrobisz tak to powinno byc dobrze

  1. <?php
  2. $a = 3.001;
  3. $b = 3.000;
  4. $c = $a - $b;
  5. echo $c;
  6. echo '<br>';
  7. echo round($c, 3);
  8. ?>


Ten post edytował rad11 31.12.2013, 00:22:09
Go to the top of the page
+Quote Post
szajens
post 31.12.2013, 00:29:45
Post #3





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


Wyczytałem że jest problem z liczeniem liczb zmiennoprzecinkowych przez komputer.

Jednak interesuje mnie jak wy to robicie, czy każdy wynik trzeba zaokrąglić funkcją round?

Czy tak jest prawidłowo?
Go to the top of the page
+Quote Post
Damonsson
post 31.12.2013, 00:51:45
Post #4





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Z bardzo małymi czy z bardzo dużymi liczbami jest zawsze problem jeśli chodzi o precyzję, po prostu tak już jest.

Możesz użyć http://php.net/manual/pl/book.bc.php
Go to the top of the page
+Quote Post
irmidjusz
post 31.12.2013, 01:04:28
Post #5





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


problem wyjaśniony jest na http://www.php.net/manual/en/language.types.float.php
najprostsze rozwiązanie to stosowanie http://www.php.net/manual/en/ref.bc.php lub zaokrąglanie wyniku funkcją round()


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
szajens
post 31.12.2013, 01:10:32
Post #6





Grupa: Zarejestrowani
Postów: 150
Pomógł: 4
Dołączył: 3.01.2010

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


Koledzy Damonsson i irmidjusz, dziękuje za pomoc, właśnie takiej funkcji szukałem, przyda się na przyszłość.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 14:44