1

Twitter APIで遊んでいます。一部の数字 (Twitter ID など) は、199693823725682700 のように非常に大きくなります。

この数値を文字列形式で取得しました。文字列キャストされた数値から -1 を減算する必要があるため、1000xE09 などではなく、通常の読み取り可能な数値に変更する必要があります。次に、数値を文字列として送信する必要もあります。

要するに、PHP では、"199693823725682700" などの文字列を別の文字列 "199693823725682699" (元の数値 -1) に変更するにはどうすればよいですか

どうもありがとう!

4

4 に答える 4

4

BCMath が利用できない場合 (利用可能な場合は望ましいオプションです)、この関数は、文字列として格納されている任意のサイズの整数をデクリメントします。浮動小数点数や科学表記法の補間の処理はありません。オプションの符号付きの 10 進数の文字列でのみ機能します。

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');

}

動いているのを見る

于 2012-05-09T16:16:02.430 に答える
2

もちろん。

BC Math モジュール
関数http://de.php.net/manual/en/function.bcsub.php

于 2012-05-09T15:35:57.740 に答える
1

どうやら今のところ、php で大きな整数を処理する唯一の方法は、bcmath拡張機能を使用することです。PHP6 では 64 ビット整数が計画されています。

于 2012-05-09T15:35:41.210 に答える
0

PHPでGMPを試してみてください。

ここにマニュアルがあります。

于 2012-05-09T15:34:43.493 に答える