php: Что эквивалентная функция int()
для типа bigint? (int()
сокращает большие числа до 2147483647)?
Пример:
$bigint1="12312342306A_C243";
$bigint1=(int)$bigint1;//2147483647
но я хочу, чтобы это было 12312342306.
php: Что эквивалентная функция int()
для типа bigint? (int()
сокращает большие числа до 2147483647)?
Пример:
$bigint1="12312342306A_C243";
$bigint1=(int)$bigint1;//2147483647
но я хочу, чтобы это было 12312342306.
Нет такого встроенного типа, как вы можете видеть здесь (из официального документа). В любом случае, вы можете использовать библиотеку GMP для управления этим длинным int.
Я знаю, что старый и ответил, но для будущей ссылки людей, смотрящих на это:
ОБНОВЛЕНО
Размер целого числа зависит от платформы, хотя максимальное значение около двух миллиардов - это обычное значение (это 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.
Возможно, это не тот ответ, который вам нужен, но почему бы не переключиться на 64-битную машину?
На моем (64-битном Fedora) ПК $bigint1 имеет значение 12312342306 по вашему желанию.
Очевидно, что невозможно воспроизвести функцию (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;
}
Я решил это путем литья для float, а не для int:
(int) '8554104470' = > 2147483647
(float) '8554104470' = > 8554104470
$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