(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 библиотека для обработки операций с большими числами. Обратите внимание, что в этом случае ваши номера будут представлены в виде строк, но библиотека предоставляет определенные методы для операций под такими строками.
вы обязательно должны использовать BCMath.
Если вы хотите знать, почему вы не можете сделать это с регулярными числами, это потому, что они являются числами с плавающей запятой, и они используют фиксированный объем пространства в памяти(64 бита, чтобы быть точным), поэтому их точность физически ограничена. В противном случае строка не ограничена, потому что это было бы глупо, если бы длина текста была ограничена. Вот почему BcMath и другие библиотеки используют string для арифметических вычислений.
Если вы хотите чтобы узнать больше о формате, используемом PHP (и почти на каждом языке) для хранения больших чисел, вы можете пойти туда:http://en.wikipedia.org/wiki/Double-precision_floating-point_format
хорошего дня