2013-03-15 10 views
6

Dlaczego echo 100000000000000; wyprowadza 1.0E+14, a nie 100000000000000?Dlaczego PHP przekształca 15 + cyfrową długą liczbę całkowitą na wyjściu

Ten rodzaj transformacji na wyjściu dzieje się tylko dla liczb całkowitych, które mają 15 i więcej cyfr.

+2

Aby być sprawiedliwym, tytuł inne pytanie nie brzmi bardzo ładnie. – Jimbo

+0

'echo number_format (100000000000000,0, null, '');' – Antony

+1

@PHPNooB OP prosi o więcej pytań niż udziela odpowiedzi, więc * rep * jest od zadawania pytań i jako taki uważam, że nie znałby tego jako swojego profilu nie oznacza, że ​​jest ekspertem PHP. Ponadto, jak zauważył Jimbo, tytuł jest naprawdę źle sformułowany. Zrób kilka badań, takich jak kliknięcie profilu, zanim oskarżysz OP o odznakę. –

Odpowiedz

10

PHP skonwertuje liczbę całkowitą na wartość typu float, jeśli jest większa niż PHP_INT_MAX. W przypadku systemów 32-bitowych jest to 2147483647.

Odpowiedź na pytania związana jest z reprezentacją ciągów w języku PHP.

Jeśli wykładnik w scientific notation jest większy niż 13 lub mniejszy niż -4, PHP użyje reprezentacji naukowej podczas drukowania pływaków.

Przykłady:

echo 0.0001; // 0.0001; 

echo 0.00001; // 1.0E-5 

// 14 digits 
echo 10000000000000; // 10000000000000 

// 15 digits 
echo 100000000000000; // 1.0E+14 

Zobacz float vs. double precision

6

Liczba ta jest zbyt duża, aby zmieściła się w 32-bitowej liczbie całkowitej, więc PHP zapisuje ją w postaci zmiennoprzecinkowej.

Zobacz sekcję przelewową całkowitą w php manual.

Jeśli masz naprawdę duże liczby całkowite, spójrz na GMP.

+0

Jaka jest największa liczba całkowita, która pasowałaby do 32 bitów? –

+0

wartość max int 32 jest 2 147 483 647 (2.1E + 9) – UnholyRanger

+3

Gdyby to była przyczyna, wszystkie liczby większe niż PHP_INT_MAX byłyby reprezentowane w notacji naukowej. Ale tak nie jest. –

3

PHP nie obsługuje dużych liczb całkowitych i dlatego traktuje je jako zmienne. Pływaki są zwykle przedstawiane w notacji naukowej, aby uwzględnić nieścisłości przekraczające pewną liczbę cyfr znaczących.

0

Dowolna liczba większa niż wbudowany w PHP całkowity rozmiar jest przechowywana i reprezentowana jako liczba zmiennoprzecinkowa.

Aby sformatować liczbę w określony sposób na wyjściu, użyj funkcji, takiej jak printf.

2

liczba jest zbyt duża, aby być przechowywane w postaci liczby całkowitej PHP na platformie więc jest on przechowywany w postaci liczby zmiennoprzecinkowej. Reguły konwersji na ciąg są różne dla liczb zmiennoprzecinkowych i liczb całkowitych.

Spróbuj wykonać następujące czynności:

var_dump(100000000000000); 
echo(is_int(100000000000000) ? 'an integer' : 'not an integer'); 

wyjściowa:

float(1.0E+14) 
not an integer 
Powiązane problemy