Функция php: int() эквивалентна для типа bigint? (int() сокращает строки до 2147483647)

php: Что эквивалентная функция int() для типа bigint? (int() сокращает большие числа до 2147483647)?

Пример:

$bigint1="12312342306A_C243";
$bigint1=(int)$bigint1;//2147483647

но я хочу, чтобы это было 12312342306.

Ответ 1

Нет такого встроенного типа, как вы можете видеть здесь (из официального документа). В любом случае, вы можете использовать библиотеку GMP для управления этим длинным int.

Ответ 2

Я знаю, что старый и ответил, но для будущей ссылки людей, смотрящих на это:

ОБНОВЛЕНО

Размер целого числа зависит от платформы, хотя максимальное значение около двух миллиардов - это обычное значение (это 32 бита). 64-разрядные платформы обычно имеют максимальное значение около 9E18, за исключением Windows до PHP 7, где всегда было 32 бит. PHP не поддерживает целые числа без знака. Integer размер может быть определен с использованием константы PHP_INT_SIZE, максимального значения с использованием константы PHP_INT_MAX с PHP 5.0.5 и минимального значения с использованием константы PHP_INT_MIN с PHP 7.0.0.

Источник

Ответ 3

Возможно, это не тот ответ, который вам нужен, но почему бы не переключиться на 64-битную машину?

На моем (64-битном Fedora) ПК $bigint1 имеет значение 12312342306 по вашему желанию.

Ответ 4

Очевидно, что невозможно воспроизвести функцию (int) точно для 64-разрядных чисел в 32-битной системе. (int) возвращает int; самое лучшее, что вы можете сделать в 32-битной системе для 64-битных чисел, - это вернуть строку, но, вероятно, это то, о чем вы просите.

Как отметил tialaramex, если вы собираетесь выполнять большую работу с 64-битными целыми числами, вы должны запустить 64-битный PHP. Если это не вариант, вы можете сделать некоторую работу, используя функции bcmath - хотя я не вижу функцию bcmath для выполнения того, спросил.

Я просто написал быструю и грязную функцию:

<?php
var_dump(toint("12312342306A_C243"));
function toint($str) {
        return preg_match('/^[0-9]+/', $str, $matches) ? $matches[0] : 0;
}

Ответ 5

Я решил это путем литья для float, а не для int:

(int) '8554104470' = > 2147483647

(float) '8554104470' = > 8554104470

Ответ 6

$bigint1="12312342306A_C243";
$bigint1=(int)$bigint1;//2147483647

Если вы хотите только номер до первого char, который не является числом (как вы говорите, вы просто хотите 12312342306), я предлагаю просто отрезать эту строку, взять то, что вы хотите, и просто вставить ее в int.

function parseBigInt(string $bigInt, string $delimiter = '_'): int
{
  if (false !== ($pos = strpos($bigInt, $delimiter))) {
      $bigInt = substr($bigInt, 0, $pos);
  }

  return (int)$bigInt;
}

$bigInt = parseBigInt('12312342306A_C243'); // '12312342306' as int