Вывод: Решение Марка Б - 64-битное, но для 32-битного я не уверен, что вы можете получить необходимую точность
ОБНОВЛЕНИЕ № 1: Длина 19 символов - это максимальная длина строки / числа
ОБНОВЛЕНИЕ № 2: Это работает, но только если число в строковом формате, например:
$number = "12345678901234567890";
если я передам это следующим образом
$number = 12345678901234567890;
Я получу предупреждение:
Предупреждение: gmp_abs (): невозможно преобразовать переменную в GMP - неправильный тип
Обновлен класс
class StringToInteger {
public static function getInteger($number) {
//return sprintf('%.0f', $number);
//$number = sprintf('%d', $number);
$number = gmp_abs($number);
return gmp_strval($number);
}
}
ОРИГИНАЛЬНЫЙ ВОПРОС НИЖЕ:
У меня есть некоторые данные, переданные в виде строки или целого числа (думаю, номер телефона, но длиннее),большая часть данных - это просто длинное число, подобное этому:
1234567890123456789
Но иногда это происходит так:
123-456-789-012-345-678-9 // could be other non numeric characters as well
Использование следующих функций не дает желаемых результатов
class StringToInteger {
public static function getInteger($number) {
return number_format($number, 0, '.', '');
}
}
class NumericOnly {
public static function formatNumber($number) {
return preg_replace("/[^\d]/", "", $number);
}
}
Передать в виде числа:
$number = 1234567890123456789;
// output: 1.23456789012E+18 can't use this
echo "Number: {$number}\n";
// Where did my number go? truncated/rounded?
// output: 12345678901218 can't use this
echo "Numeric Only: ".NumericOnly::formatNumber($number)."\n";
// Where did my number go? truncated?
// output: 1234567890123456768 can't use this
echo "String To Integer: ".StringToInteger::getInteger($number)."\n";
Передать в виде строки:
$string = '1234567890123456789';
// output: 1234567890123456789
echo "String Number: {$string}\n";
// Works
// output: 1234567890123456789
echo "String Numeric Only: ".NumericOnly::formatNumber($string)."\n";
// Where did my number go? truncated?
// output: 1234567890123456768 can't use this
echo "String To Integer: ".StringToInteger::getInteger($string)."\n";
// After Conversion, truncated?
// output: 1234567890123456768 can't use this
echo "After String To Integer: ";
echo StringToInteger::getInteger(NumericOnly::formatNumber($string))."\n";
Буквенно-цифровой
$string = '123-456-789-012-345-678-9';
// output: 123-456-789-012-345-678-9 can't use this
echo "String Number: {$string}\n";
// Works
// output: 1234567890123456789
echo "String Numeric Only: ".NumericOnly::formatNumber($string)."\n";
// After Conversion, truncated?
// output: 1234567890123456768 can't use this
echo "After String To Integer: ";
echo StringToInteger::getInteger(NumericOnly::formatNumber($string))."\n";
Любые идеи о том, как получитьдлинное целое число (полное правильное число)?