(PHP) как избежать научной нотации и показать фактические большие числа?

Я работал с PHP-кодом, что ожидаемый результат станет:

1
101
10001
1000001
100000001
10000000001
1000000000001
100000000000001
10000000000000001
1000000000000000001


наконец, результат был :

1
101
10001
1000001
100000001
10000000001
1000000000001 // (1 млрд) to (100 миллиардов - 1) по-прежнему показывает фактическое число, а затем
1.0 E+14
1.0 E+16
1.0 E+18


Я нашел там некоторые решения! они сказали, используя sprintf или пытаются format_number. Я попробовал оба.

используя sprintf и в итоге :

$format_x = sprintf("%.0f ",$x);
echo $format_x.$br;

1
101
10001
1000001
100000001
10000000001
1000000000001
100000000000001
10000000000000000
1000000000000000000


используя format_number и в итоге :

echo number_format($x, 0).$br;

1
101
10,001
1,000,001
100,000,001
10,000,000,001
1,000,000,000,001
100,000,000,000,001
10,000,000,000,000,000
1,000,000,000,000,000,000


но он по-прежнему не показывает фактические большие числа. ну, два способа были хороши, но это не соответствует тому, что я хочу. кто-нибудь может это решить?

3 ответов


вы можете использовать стандартный bc_math библиотека для обработки операций с большими числами. Обратите внимание, что в этом случае ваши номера будут представлены в виде строк, но библиотека предоставляет определенные методы для операций под такими строками.


Я предлагаю вам взглянуть на BC Math расширение в php.


вы обязательно должны использовать BCMath.

Если вы хотите знать, почему вы не можете сделать это с регулярными числами, это потому, что они являются числами с плавающей запятой, и они используют фиксированный объем пространства в памяти(64 бита, чтобы быть точным), поэтому их точность физически ограничена. В противном случае строка не ограничена, потому что это было бы глупо, если бы длина текста была ограничена. Вот почему BcMath и другие библиотеки используют string для арифметических вычислений.

Если вы хотите чтобы узнать больше о формате, используемом PHP (и почти на каждом языке) для хранения больших чисел, вы можете пойти туда:http://en.wikipedia.org/wiki/Double-precision_floating-point_format

хорошего дня