Position actuelle: Accueil> Derniers articles> Comment convertir les valeurs flottantes en entiers à l'aide de setType ()

Comment convertir les valeurs flottantes en entiers à l'aide de setType ()

gitbox 2025-05-29

En PHP, la conversion de type est une opération courante, en particulier lorsqu'elle est nécessaire de taper strictement la variable. SetType () est une fonction intégrée fournie par PHP pour convertir les variables en types spécifiés. SetType () semble simple lors de la gestion des numéros à virgule flottante dans les conversions entières, mais il y a quelques détails à prêter attention derrière.

Utilisation de base

La syntaxe de base de setType () est la suivante:

 bool settype(mixed &$var, string $type)

Cette fonction prend deux paramètres: la référence d'une variable $ var et le type de type cible $ à convertir (tel que "entier", "chaîne", etc.). La fonction renvoie une valeur booléenne, indiquant si le type est défini avec succès.

Par exemple, convertissez un numéro de point flottant en un entier:

 $number = 42.99;
settype($number, "integer");
echo $number; // Sortir:42

Le comportement réel des nombres de points flottants aux entiers

Lors de la conversion de Float en entier, PHP agit pour tronquer la partie fractionnaire plutôt que de l'arrondir. C'est très important.

Par exemple:

 $float = 9.99;
settype($float, "integer");
echo $float; // Sortir:9

Quelle que soit la partie après le point décimal, tant que vous utilisez SetType () , il sera supprimé directement.

setType () vs (int) cast

Bien que SetType () puisse être utilisé pour la conversion de type, dans le développement réel, les fonctions similaires sont (int) ou intVal () :

 $float = 7.89;
$int1 = (int) $float;
$int2 = intval($float);

echo $int1; // Sortir:7
echo $int2; // Sortir:7

Ces méthodes sont les mêmes que le résultat de la conversion de SetType () dans le comportement, sauf qu'ils sont différents en termes de sémantique et d'écriture.

  • SetType () est de modifier la variable d'origine sur place

  • (int) renvoie une nouvelle valeur

  • IntVal () peut gérer plus de types (tels que les chaînes) et fournir des paramètres supplémentaires

Choses à noter

  1. Perte de précision des données : lors de la conversion des nombres à virgule flottante en entiers, la partie décimale sera directement tronquée, ce qui peut rendre les résultats attendus incompatibles avec les résultats réels.

  2. Problème de débordement : les entiers de PHP ont des limites de portée (-9223372036854775808 à 922337203685475807 sur les systèmes 64 bits), les numéros à point flottants en dehors de la plage peuvent ne pas être convertis correctement.

  3. Pas adapté aux calculs financiers : si vous avez affaire à des entreprises impliquant des montants ou en nécessitant des opérations décimales de haute précision, l'utilisation de SetType () ou de la conversion entière n'est généralement pas sûre, et les bibliothèques de haute précision telles que BCMATH ou GMP doivent être prises en compte.

Exemple: traitement des prix par l'utilisateur

Supposons que l'utilisateur soumet un champ de prix, et que vous souhaitez simplement prendre sa partie entière pour une sorte de logique de facturation:

 $price = $_POST['price']; // La saisie de l'utilisateur peut être "199.95"
if (is_numeric($price)) {
    $price = (float) $price;
    settype($price, "integer");
    // Maintenant $price C'est un entier 199,Peut être utilisé pour un traitement ultérieur
}

Pour des raisons de sécurité, assurez-vous d'utiliser is_numeric () pour vérifier si l'entrée est un numéro légal.

Remarque sur la conversion de type dans les paramètres d'URL

Si vous souhaitez convertir lors du traitement des paramètres d'URL, par exemple:

 https://gitbox.net/process.php?value=12.75

Vous pourriez faire ceci:

 $value = $_GET['value'];
if (is_numeric($value)) {
    $value = (float) $value;
    settype($value, "integer");
    echo "La valeur entière est:" . $value;
}

Assurez-vous de toujours faire la vérification des types pour éviter les problèmes causés par une entrée malveillante ou incorrecte.

Résumer

L'utilisation de setType () pour convertir les nombres à virgule flottante en entiers est un moyen direct et efficace en PHP, mais il existe également des "pièges" qui doivent être compris, tels que la troncature plutôt que l'arrondi, la modification de type, etc. Comprendre son comportement et les scénarios applicables peuvent vous aider à écrire des programmes PHP plus stables et prévisibles. Pour des exigences de précision plus complexes ou plus élevées, la prise en compte des méthodes de traitement des données plus avancées sera un meilleur choix.