2016-02-07 3 views
3

Есть ли какая-либо функция, которая легко эхо целое число, которое составляет 15 + цифр? Единственный способ, мне удалось, как это:Преобразование int длиной более 16 цифр в строку в php

$num = 123456789; 
$num = number_format($num); 
$num = str_replace(',', '', $num); 
echo $num; 

Но даже так это точно только до 17 цифр. После 16-й цифры номер не печатается точно (потому что в качестве поплавка он начинает становиться неточным - see here).

EDIT: Из ответов ниже я написал ini_set('precision',40);, а затем повторил $ ​​num прямо. Все это было просто, просто не показывать десятичную точку в номере с плавающей точкой. И снова после 16-й цифры он начинает становиться неточным. Я также попробовал другое предложение об изменении его в массив, а затем повторил его с помощью str_split($num);, и снова цифры были неточными с 17-го числа!

Простейшим решением было бы преобразование целого числа в строку. Я пробовал:

$num = (string)$num; 
//and 
$num = strval($num); 

Но ничего не измените, и они действуют так, как если бы они оставались как int ??

Мой вопрос в том, почему преобразования в строки не работают. Есть ли способ превратить число в строку? Благодаря

ответ

2

Единственное решение, которое я могу думать меняется точность поплавков в php.ini

ini_set('precision', 25); 

Я не знаю, где вы получите эти большие цифры от, но я бы предложил посмотреть в bc functions тоже!

Последнее, что я думал, это использовать функцию разрыва, чтобы разделить строку на массив и взаимодействовать через нее.

EDIT: Когда все предложения не удалось, только ваши варианты, чтобы проверить BC Math и/или GMP функции, а также MoneyMath. Пакет BigInteger также должен делать трюк, который использует GMP и BC.

+0

спасибо, я попробовал ваши предложения ... Проверьте внесенные изменения – Ben

+0

@Ben Обновлен мой ответ – manniL

0

Ну, вы видите, это не "ИНТ", как вы утверждали :)

echo PHP_INT_MAX; // echoes 9223372036854775807 
$n = 9223372036854775807; 
echo $n; // echoes 9223372036854775807 

$n = 9223372036854775808; 
echo $n; // echoes 9.2233720368548E+18 

Установка precision к чему-то большему, as manniL said, делает трюк.

ini_set("precision", 50); 
$n = 9223372036854775808; 
echo $n; // echoes 9223372036854775808 
Смежные вопросы