PHP: intval() équivalent pour le nombre >= 2147483647
En PHP 5, j'utilise intval() chaque fois que je reçois des nombres en entrée. De cette façon, je veux m'assurer que je n'ai pas de chaînes ou des nombres décimaux. Mon entrée chiffres devraient tous être des nombres entiers. Mais quand je reçois un nombre >= 2147483647, l'entier signé limite est franchie.
Que puis-je faire pour avoir un intval() équivalent pour les nombres dans toutes les tailles?
Voici ce que je veux:
<?php
$inputNumber = 3147483647.37;
$intNumber = intvalEquivalent($inputNumber);
echo $intNumber; //output: 3147483647
?>
Je vous remercie beaucoup à l'avance!
Edit: sur la Base des réponses, j'ai essayé de coder une fonction équivalente. Mais cela ne fonctionne pas exactement comme intval() n'est pas encore. Comment puis-je l'améliorer? Quel est le problème avec elle?
function intval2($text) {
$text = trim($text);
$result = ctype_digit($text);
if ($result == TRUE) {
return $text;
}
else {
$newText = sprintf('%.0f', $text);
$result = ctype_digit($newText);
if ($result == TRUE) {
return $newText;
}
else {
return 0;
}
}
}
- Donc exactement ce qui ne fonctionne pas dans il et quel est le problème avec d'autres solutions, dont l'une regex?
Vous devez vous connecter pour publier un commentaire.
Essayer cette fonction, il va bien enlever toute décimal comme intval ne et de supprimer tout caractère non numérique.
Ici est le produit de sortie:
Espère que ça aide!
intval(-100) == -100
,bigintval(-100) == 0
.vous pouvez également utiliser des expressions régulières pour supprimer tout ce qui est après le intial les parties numériques:
Utiliser
number_format($inputNumber, 0, '', '')
Ou si vous voulez seulement de vérifier si ses un nombre entier puis utilisez
ctype_digit($inputNumber)
Ne pas utiliser le projet de
is_numeric
, comme aussi les flotteurs sont numériques. par exemple, "+0123.45e6" accepté paris_numeric
En plus de number_format, vous pouvez utiliser sprintf:
Cependant, les deux solutions souffrent de flotteur de dépassement, par exemple:
Si vous souhaitez manipuler des nombres en précision arbitraire, vous aurez besoin d'utiliser la gmp extension. La fonction
gmp_init()
, par exemple, convertit une chaîne en un gmp objet de la ressource. l'inconvénient est que vous devez utiliser d'autres fonctions de l'extension à d'autres processus que l'objet. De la convertir en une chaîne de caractères se fait à l'aide degmp_strval()
, par exemple.Vous voudrez peut-être que vérifier que la chaîne de caractères représentant un nombre valide et utiliser la chaîne elle-même, si vous n'avez pas l'intention de faire toutes les opérations sur la valeur. Qui peut être fait à l'aide d'une expression régulière:
Une autre option est d'utiliser
is_numeric()
. Mais cette fonction n'a plus de conversion que vous pourriez aimer. Citant docs de cette fonction: