PHP: intval () эквивалентный для чисел> = 2147483647

Вы можете использовать функцию startForeground (int, Notification) , см. Здесь и здесь

. Запущенная служба может использовать startForeground (int, Notification ) API для перевода службы в состояние переднего плана, где система считает, что это то, о чем пользователь активно осведомлен, и, следовательно, не является кандидатом на убийство при нехватке памяти. (По-прежнему теоретически возможно уничтожение службы под сильным давлением памяти со стороны текущего приложения переднего плана, но на практике это не должно вызывать беспокойства.)

25
задан George Claghorn 12 February 2011 в 00:04
поделиться

5 ответов

Попробуйте эту функцию, она правильно удалит все десятичные числа, как это делает intval, и удалит все нечисловые символы.

<?php
function bigintval($value) {
  $value = trim($value);
  if (ctype_digit($value)) {
    return $value;
  }
  $value = preg_replace("/[^0-9](.*)$/", '', $value);
  if (ctype_digit($value)) {
    return $value;
  }
  return 0;
}

// SOME TESTING
echo '"3147483647.37" : '.bigintval("3147483647.37")."<br />";
echo '"3498773982793749879873429874.30872974" : '.bigintval("3498773982793749879873429874.30872974")."<br />";
echo '"hi mom!" : '.bigintval("hi mom!")."<br />";
echo '"+0123.45e6" : '.bigintval("+0123.45e6")."<br />";
?>

Вот результат:

"3147483647.37" : 3147483647
"3498773982793749879873429874.30872974" : 3498773982793749879873429874
"hi mom!" : 0
"+0123.45e6" : 0

Надеюсь, что это поможет!

21
ответ дан 28 November 2019 в 21:37
поделиться

вы также можете использовать регулярные выражения, чтобы удалить все, что находится после начальные числовые части:

<?php
$inputNumber = "3147483647.37";
$intNumber = preg_replace('/^([0-9]*).*$/', "\\1", $inputNumber);
echo $intNumber; // output: 3147483647
?>
6
ответ дан 28 November 2019 в 21:37
поделиться

В дополнение к number_format вы можете использовать sprintf:

sprintf("%.0f", 3147483647.37) // 3147483647

Однако оба решения страдают от переполнения с плавающей запятой, например:

sprintf("%.0f", 314734534534533454346483647.37) // 314734534534533440685998080
2
ответ дан 28 November 2019 в 21:37
поделиться

Либо используйте number_format ($ inputNumber, 0, '', '')

Или, если вы хотите только проверить, целое ли это число, используйте ctype_digit ( $ inputNumber)

Не используйте предложенный is_numeric , так как числа с плавающей запятой также являются числовыми. например, "+ 0123.45e6" принимается is_numeric

2
ответ дан 28 November 2019 в 21:37
поделиться

Если вы хотите работать с числами произвольной точности, вам нужно будет использовать расширение gmp . Например, функция gmp_init () преобразует строку в объект ресурса gmp. недостатком является то, что вы должны использовать другие функции этого расширения для дальнейшей обработки этого объекта. Преобразование обратно в строку выполняется, например, с помощью gmp_strval () .

$gmpObject = gmp_init($string, 10);
if ($gmpObject === FALSE) {
    # The string was not a valid number,
    # handle this case here
}
echo gmp_strval($gmpObject);

Вы можете захотеть только проверить , что строка представляет собой допустимое число, и использовать саму строку , если вы не собираетесь выполнять какие-либо операции со значением. Это можно сделать с помощью регулярного выражения:

$containsInt = preg_match('/^\d+$/', $string);
# Or for floating point numbers:
$containsFloat = preg_match('/^\d+(.\d+)?$/', $string);
echo $string;

Другой вариант - использовать is_numeric () . Но эта функция выполняет больше преобразований, чем вам хотелось бы. Цитата из документации этой функции:

... + 0123.45e6 - допустимое числовое значение ...

0
ответ дан 28 November 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: