2012-05-09 1 views
1

Я играю с API Twitter. Некоторые номера (например, Twitter ID) действительно велики, например, 199693823725682700.PHP - строка до 64-битного номера

У меня есть это число как строковый формат, и теперь мне нужно изменить его на обычный читаемый номер, а не 1000xE09, потому что мне нужно вычесть -1 из этого строкового номера. Затем мне также нужно отправить номер в виде строки.

В целом, на PHP, как я могу изменить строку число, например, «199693823725682700», на другую строку «199693823725682699» (исходный номер -1)?

Большое спасибо!

ответ

4

Если BCMath не доступна (это было бы предпочтительным вариантом, если он доступен), эта функция будет уменьшаем произвольного размера целое число хранится в виде строки. Нет обработки для поплавков или интерполяции научной нотации, она будет работать только со строкой десятичных цифр с необязательным знаком.

function decrement_string ($str) { 

    // 1 and 0 are special cases with this method 
    if ($str == 1 || $str == 0) return (string) ($str - 1); 

    // Determine if number is negative 
    $negative = $str[0] == '-'; 

    // Strip sign and leading zeros 
    $str = ltrim($str, '0-+'); 

    // Loop characters backwards 
    for ($i = strlen($str) - 1; $i >= 0; $i--) { 

    if ($negative) { // Handle negative numbers 

     if ($str[$i] < 9) { 
     $str[$i] = $str[$i] + 1; 
     break; 
     } else { 
     $str[$i] = 0; 
     } 

    } else { // Handle positive numbers 

     if ($str[$i]) { 
     $str[$i] = $str[$i] - 1; 
     break; 
     } else { 
     $str[$i] = 9; 
     } 

    } 

    } 

    return ($negative ? '-' : '').ltrim($str, '0'); 

} 

See it working

+0

это работает для меня. bssub и другие не работали для моего дела. Большое спасибо за такой хитрый код. – clerksx

1

По-видимому, на данный момент единственным способом иметь дело с большими целыми числами в php является использование расширения bcmath. 64-разрядные целые числа строятся в PHP6.

+0

Там не будет PHP6. См. 5.4 примечания к выпуску. – DmitryR

+0

@DmitryR: У вас есть ссылка? Единственное, что я вижу в выпуске [5.4.0 release] (http://php.net/releases/5_4_0.php): «PHP 5.4 будет последней серией поддержки Windows XP и Windows 2003. Мы не будем предоставлять бинарных пакетов для этих версий Windows после PHP 5.4. " – Travesty3

Смежные вопросы