Na przykład mam ten wiersz kodu:Dodawanie liczbę całkowitą do pływaka w PHP zaokrągla pływaka do 1 miejsca po przecinku
echo 10359023529 + 0.2137582935;
Dlaczego ten zwrot:
10359023529,2
zamiast:
10359023529.2137582935
Na przykład mam ten wiersz kodu:Dodawanie liczbę całkowitą do pływaka w PHP zaokrągla pływaka do 1 miejsca po przecinku
echo 10359023529 + 0.2137582935;
Dlaczego ten zwrot:
10359023529,2
zamiast:
10359023529.2137582935
Zastosowanie: bcadd()
echo bcadd(10359023529, 0.2137582935, 10);
To jest ograniczenie wartości zmiennoprzecinkowej. Wartość zmiennoprzecinkowa jest przechowywana jako współczynnik i wykładnik. Będziesz miał dużo precyzji z małymi liczbami i niską precyzją z dużymi liczbami. Oto więcej szczegółów niż chcesz: http://en.wikipedia.org/wiki/IEEE_754-2008
Dolna linia: wysokie wartości będą bardzo nieprecyzyjne. Spróbuj użyć małego zakresu wartości.
Oto więcej o zmiennoprzecinkowej precyzji szczególnie w odniesieniu do PHP: http://php.net/manual/en/language.types.float.php
Jeśli naprawdę potrzebujesz wysoką precyzję i wysokie numery, spojrzeć na naszą erą matematyki (http://www.php.net/manual/en/ref.bc.php) i GMP (http://www.php.net/manual/en/ref.gmp.php).
Istnieje jedna niejasna opcja w php.ini
, która określa, ile cyfr znaczących ma być wyświetlanych podczas drukowania liczb zmiennoprzecinkowych. W moim przypadku wygląda to następująco
; The number of significant digits displayed in floating point numbers.
; http://php.net/precision
precision = 14
Oczywiście to dotyczy tylko formatowania, nie fundamentalny fakt, że liczby zmiennoprzecinkowe są z natury nieprecyzyjne. Według IEEE 754 precyzja podwójna to 15.95 cyfr dziesiętnych.
Precyzja wyników nie jest problemem; typ danych zmiennoprzecinkowych jest tylko tak dokładny. – meagar
Co do zasady masz rację, ale w tym konkretnym przypadku nie przekroczył podwójnej precyzji. –
@Adam Wierzę, że rzeczywiście tak zrobił; w przeciwnym razie jego implementacja została specjalnie ustawiona tak, aby wyświetlała tylko jedno miejsce po przecinku podczas wysyłania liczb zmiennoprzecinkowych, domyślnie 14. – meagar
Istnieje jeden lub więcej ustawień php.ini tego państwa, ile cyfr do wydrukowania. Nie jestem pewien, które z nich. – erisco