PHP - 字符串到64位数

时间:2012-05-09 15:32:26

标签: php twitter 64-bit

我在玩Twitter API。一些数字(如Twitter ID)非常大,如199693823725682700。

我已将此数字作为字符串格式,现在我需要将其更改为正常的可读数字,而不是像1000xE09,因为我需要从该字符串转换的数字中减去-1。然后,我还需要将数字作为字符串发送。

总而言之,在PHP中,如何将字符串更改为数字,例如“199693823725682700”到另一个字符串“199693823725682699”(原始数字-1)?

非常感谢!

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

不确定

BC Math模块
功能http://de.php.net/manual/en/function.bcsub.php

答案 2 :(得分:1)

显然现在只有处理php中的大整数才能使用bcmath扩展名。 PHP6中规划了64位整数。

答案 3 :(得分:0)

你应该尝试使用PHP的GMP,

这是manual