![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Wynik: Kod float(50.4) float(50.4) t Jak to jest możliwe? Jeżeli zrobię rzutowanie na float albo jeszcze raz zadeklaruje wartość to działa ale wg var_dump to jest już float! Zmienna $price to argument metody. Wygląda to jakby gdzieś po drodze ta zmienna została .. uszkodzona.. Ten post edytował markonix 9.05.2012, 13:30:31 -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Zakładam, że zmienna $price jest w wyliczana w jakiś dynamiczny sposób? Wszystko jest w porządku - widocznie ma wartość większą niż 50.4, a jedynie przy wyświetlaniu jest zaokrąglana do jednego miejsca po przecinku.
1. Liczny 50.4 nie da się precyzyjnie zapisać przy pomocy typu float. W rzeczywistości jest to tylko jakieś przybliżenie tej liczby: 2. https://www.google.com/search?sourceid=chro...600&bih=775 EDIT: Zmienna $price ma wartość większą niż te 50.399...515, które podajesz wpisując 50.4. Ten post edytował Crozin 9.05.2012, 13:37:22 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Wszystko się zgadza.
Jest jakiś "naj" sposób? Rzutowanie na float, round przy obliczaniu? -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@markonix: Generalnie wszystko zależy od konkretnej sytuacji, jednak tutaj powinieneś skorzystać z liczb o "stałej"/dużej precyzji*. W PHP do dyspozycji masz chociażby GMP.
Ewentualnie do porównywania liczb zmiennoprzecinkowych w przypadkach, gdzie nie interesuje nas aż tak bardzo ich dokładność można skorzystać z prostej funkcji:
* Nie mam najmniejszego pojęcia jakie będzie poprawne przetłumaczenie angielskiego arbitrary-precision. Ten post edytował Crozin 9.05.2012, 16:13:13 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Myślę, że round do dwóch miejsc po przecinku będzie tutaj najlepszym rozwiązaniem - są to kwoty (ceny) więc i tak dobrze jest to unormować, byle w każdym miejscu jednakowo.
-------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 18:13 |