Вы можете использовать функцию startForeground (int, Notification) , см. Здесь и здесь
. Запущенная служба может использовать startForeground (int, Notification ) API для перевода службы в состояние переднего плана, где система считает, что это то, о чем пользователь активно осведомлен, и, следовательно, не является кандидатом на убийство при нехватке памяти. (По-прежнему теоретически возможно уничтожение службы под сильным давлением памяти со стороны текущего приложения переднего плана, но на практике это не должно вызывать беспокойства.)
Попробуйте эту функцию, она правильно удалит все десятичные числа, как это делает 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
Надеюсь, что это поможет!
вы также можете использовать регулярные выражения, чтобы удалить все, что находится после начальные числовые части:
<?php
$inputNumber = "3147483647.37";
$intNumber = preg_replace('/^([0-9]*).*$/', "\\1", $inputNumber);
echo $intNumber; // output: 3147483647
?>
В дополнение к number_format вы можете использовать sprintf:
sprintf("%.0f", 3147483647.37) // 3147483647
Однако оба решения страдают от переполнения с плавающей запятой, например:
sprintf("%.0f", 314734534534533454346483647.37) // 314734534534533440685998080
Либо используйте number_format ($ inputNumber, 0, '', '')
Или, если вы хотите только проверить, целое ли это число, используйте ctype_digit ( $ inputNumber)
Не используйте предложенный is_numeric
, так как числа с плавающей запятой также являются числовыми. например, "+ 0123.45e6" принимается is_numeric
Если вы хотите работать с числами произвольной точности, вам нужно будет использовать расширение 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 - допустимое числовое значение ...