Comment convertir une chaîne en nombre en PHP?

Je veux convertir ces types de valeurs, '3', '2.34', '0.234343', etc. pour un certain nombre. En JavaScript, nous pouvons utiliser Number(), mais existe-t-il une méthode similaire disponible en PHP?

Input             Output
'2'               2
'2.34'            2.34
'0.3454545'       0.3454545
433
demandé sur Mark Amery 2011-12-16 08:08:14

29 réponses

Vous n'avez généralement pas besoin de le faire, puisque PHP va forcer le type pour vous dans la plupart des circonstances. Pour les situations où vous voulez convertir explicitement le type, cast Il:

$num = "3.14";
$int = (int)$num;
$float = (float)$num;
648
répondu deceze 2011-12-16 04:13:32

, Il existe quelques façons de le faire:

  1. Convertit les chaînes en types de données primitives numériques:

    $num = (int) "10";
    $num = (double) "10.12"; // same as (float) "10.12";
    
  2. Effectuer des opérations mathématiques sur les chaînes:

    $num = "10" + 1;
    $num = floor("10.1");
    
  3. Utiliser intval() ou floatval():

    $num = intval("10");
    $num = floatval("10.1");
    
  4. Utilisation settype().

114
répondu fardjad 2014-08-02 03:17:02

Dans n'importe quelle langue (vaguement typée), vous pouvez toujours convertir une chaîne en un nombre en y ajoutant un zéro.

Cependant, cela a très peu de sens car PHP le fera automatiquement au moment de l'utilisation de cette variable, et il sera converti en chaîne de toute façon au moment de la sortie.

Notez que vous voudrez peut-être garder les nombres pointillés comme des chaînes, car après la coulée à flotter, il peut être modifié de façon imprévisible, en raison de la nature des nombres flottants.

45
répondu Your Common Sense 2014-04-13 08:24:33

Pour éviter des problèmes, essayez intval($var). Quelques exemples:

<?php
echo intval(42);                      // 42
echo intval(4.2);                     // 4
echo intval('42');                    // 42
echo intval('+42');                   // 42
echo intval('-42');                   // -42
echo intval(042);                     // 34 (octal as starts with zero)
echo intval('042');                   // 42
echo intval(1e10);                    // 1410065408
echo intval('1e10');                  // 1
echo intval(0x1A);                    // 26 (hex as starts with 0x)
echo intval(42000000);                // 42000000
echo intval(420000000000000000000);   // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8);                   // 42
echo intval('42', 8);                 // 34
echo intval(array());                 // 0
echo intval(array('foo', 'bar'));     // 1
?>
32
répondu gopeca 2017-10-11 19:44:48

Vous pouvez utiliser:

(int)(your value);

Ou vous pouvez utiliser:

intval(string)
23
répondu noobie-php 2014-04-09 00:13:51

Si vous souhaitez obtenir flotteur pour $value = '0.4', mais int pour $value = '4', vous pouvez écrire:

$number = ($value == (int) $value) ? (int) $value : (float) $value;

Un peu sale, mais ça marche.

17
répondu Aleksei Akireikin 2014-09-15 04:44:12

Vous pouvez utiliser (int)_value_ par exemple.

$string = '100';
$int = (int)$string;

Voir Type Jonglage .

14
répondu Elbert Labasano 2015-09-12 20:38:49

Dans PHP vous pouvez utiliser intval(string) or floatval(string) fonctions pour convertir des chaînes en nombres.

11
répondu Kashif Khan 2014-04-09 00:12:46

Vous pouvez toujours y ajouter zéro!

Input             Output
'2' + 0           2 (int)
'2.34' + 0        2.34 (float)
'0.3454545' + 0   0.3454545 (float)
11
répondu Boykodev 2016-07-18 08:13:53

Juste Une petite note aux réponses qui peuvent être utiles et plus sûrs dans certains cas. Vous pouvez vérifier si la chaîne contient réellement une valeur numérique valide d'abord et seulement ensuite la convertir en un type numérique (par exemple si vous devez manipuler des données provenant d'une base de données qui convertit les ints en chaînes). Vous pouvez utiliser is_numeric(), puis floatval():

$a = "whatever"; // any variable

if (is_numeric($a)) 
    var_dump(floatval($a)); // type is float
else 
    var_dump($a); // any type
10
répondu taseenb 2013-08-10 17:16:02

Au lieu d'avoir à choisir la météo pour convertir le string en int ou float. Vous pouvez simplement ajouter un 0 et PHP convertira automatiquement le résultat en un type numérique.

// being sure the string is actually a number
if( is_numeric($string) )
    $number = $string + 0;
else // let's the number be 0 if the string is not a number
    $number = 0;
10
répondu webNeat 2015-06-03 09:35:27

J'ai trouvé qu'en JavaScript un moyen simple de convertir une chaîne en nombre est à multiplier par 1. Il résout le problème de concaténation, car le symbole " + "a plusieurs utilisations en JavaScript, tandis que le symbole" * " est purement pour la multiplication mathématique.

Basé sur ce que J'ai vu ici concernant PHP étant automatiquement prêt à interpréter une chaîne contenant des chiffres comme un nombre (et les commentaires sur l'ajout, puisque dans PHP LE " + " est purement pour l'addition mathématique), ceci multiply trick fonctionne très bien pour PHP, aussi.

Je l'ai testé, et ça marche... Bien que selon la façon dont vous avez acquis la chaîne, vous pouvez appliquer la fonction trim () à elle, avant de multiplier par 1.

7
répondu vernonner3voltazim 2014-04-13 08:29:13

Voici une fonction que j'ai écrite pour me simplifier les choses:

Il renvoie également des versions abrégées de booléen, entier, double et réel.

function type($mixed, $parseNumeric = false)
{        
    if ($parseNumeric && is_numeric($mixed)) {
        //Set type to relevant numeric format
        $mixed += 0;
    }
    $t = gettype($mixed);
    switch($t) {
        case 'boolean': return 'bool'; //shorthand
        case 'integer': return 'int';  //shorthand
        case 'double': case 'real': return 'float'; //equivalent for all intents and purposes
        default: return $t;
    }
}

Appeler le type avec parseNumeric défini sur true convertira les chaînes numériques avant de vérifier le type.

Ainsi:

Type ("5", true) renverra int

Type ("3.7", true) renverra float

Type ("500") renverra string

Soyez prudent car il s'agit d'une sorte de fausse méthode de vérification et votre réelle variable sera toujours une chaîne. Vous devrez convertir la variable réelle au type correct si nécessaire. J'en avais juste besoin pour vérifier si la base de données devait charger un id d'élément ou un alias, n'ayant donc aucun effet inattendu car elle sera analysée en tant que chaîne au moment de l'exécution de toute façon.

Modifier

Si vous souhaitez détecter si les objets sont des fonctions, ajoutez ce cas au commutateur:

case 'object': return is_callable($mixed)?'function':'object';
7
répondu Dieter Gribnitz 2014-10-30 08:24:07

Voici la fonction qui réalise ce que vous recherchez. Nous avons d'abord vérifier si la valeur peut être comprise comme un nombre, si nous nous tournons vers un int et un float. Si int et float sont les mêmes (par exemple, 5 = = 5.0), nous retournons la valeur int. Si int et float ne sont pas les mêmes (par exemple, 5 != 5.3) alors nous supposons que vous avez besoin de la précision du flotteur et renvoyez cette valeur. Si la valeur n'est pas numérique, nous lançons un avertissement et retournons null.

function toNumber($val) {
    if (is_numeric($val)) {
        $int = (int)$val;
        $float = (float)$val;

        $val = ($int == $float) ? $int : $float;
        return $val;
    } else {
        trigger_error("Cannot cast $val to a number", E_USER_WARNING);
        return null;
    }
}
5
répondu CogSciGradStudent 2016-01-02 00:55:48

En plus de Boykodev réponse je suggère ceci:

Input             Output
'2' * 1           2 (int)
'2.34' * 1        2.34 (float)
'0.3454545' * 1   0.3454545 (float)
5
répondu drugan 2016-10-03 13:29:52
$a = "10";

$b = (int)$a;

Vous pouvez l'utiliser pour convertir une chaîne en un entier dans PHP.

4
répondu Pritom 2014-04-09 00:13:29

, Vous pouvez utiliser:

((int) $var)   ( but in big number it return 2147483647 :-) )

, Mais la meilleure solution est d'utiliser:

if (is_numeric($var))
    $var = (isset($var)) ? $var : 0;
else
    $var = 0;

Ou

if (is_numeric($var))
    $var = (trim($var) == '') ? 0 : $var;
else
    $var = 0;
4
répondu Mehdi Ajdari 2014-04-13 08:26:38

Essayez d'utiliser quelque chose comme ceci:

<?php
$string='5';// $ string is a variable to hold string '5'
$int=intval($string);// $int is the converted string to integer  $int=intval('5');
echo$int;//5
?>
4
répondu Nikhil Jaitak 2014-05-21 09:50:14
    $num = "3.14";
    $int = (int)$num; // output = 3
    $float = (float)$num; // output = 3.14
    $double = (double)$num; // output = 3.14

Vous pouvez convertir une chaîne en nombre en PHP en utilisant cast .

4
répondu Sandun Harshana 2014-09-15 05:11:31

, Vous pouvez modifier le type de données comme suit

$number = "1.234";

echo gettype ($number) . "\n"; //Returns string

settype($number , "float");

echo gettype ($number) . "\n"; //Returns float

Pour des raisons historiques, "double" est renvoyé en cas de flottement.

La Documentation PHP

3
répondu David Lozano 2013-12-30 13:40:35

Pour votre cas spécifique, vous pouvez simplement multiplier par 1 pour convertir une chaîne en nombre en php. PHP s'occupe automatiquement du flottant et de l'entier.

$num = "2.12";
var_dump(is_float($num)); //bool(false)
var_dump(is_int($num)); //bool(false)
var_dump(is_string($num)); //bool(true)

$num = $num*1;
var_dump(is_float($num)); //bool(true)
var_dump(is_int($num)); //bool(false)
var_dump(is_string($num)); //bool(false)
3
répondu Haktan Suren 2014-07-20 22:23:11

PHP le fera pour vous dans les limites

<?php
   $str="3.148";
   $num=$str;

   printf("%f\n", $num);
?>
2
répondu Adrian Cornish 2011-12-16 04:10:48

Toutes les suggestions perdent le type numérique cela me semble une bonne pratique

function str2num($s){
//returns a num or FALSE
    $return_value =  !is_numeric($s) ? false :               (intval($s)==floatval($s)) ? intval($s) :floatval($s);
    print "\nret=$return_value type=".gettype($return_value)."\n";
}
2
répondu Rocco Galasso 2015-04-29 20:34:15

Oui, il existe une méthode similaire en PHP, mais elle est si peu connue que vous en entendrez rarement parler. C'est un opérateur arithmétique appelé " identity ", comme décrit ici:

Opérateurs Physiques

Pour convertir une chaîne numérique en nombre, procédez comme suit:

$a = +$a;
2
répondu aldemarcalazans 2018-05-10 18:31:46

Vous pouvez simplement utiliser la fonction intval() pour convertir une chaîne en int

1
répondu Codemaker 2018-04-03 07:22:33

Vous pouvez simplement écrire comme ceci:

<?php
    $data = ["1","2","3","4","5"];
    echo json_encode($data, JSON_NUMERIC_CHECK);
?>
1
répondu Dominic Amal Joe F 2018-08-28 11:20:23

J'ai eu la question "disons que vous écriviez la fonction intégrée pour lancer un entier dans une chaîne en PHP, comment écririez-vous cette fonction" dans une interview de programmation. Voici une solution.

$nums = ["0","1","2","3","4","5","6","7","8","9"];
$int = 15939; 
$string = ""; 
while ($int) { 
    $string .= $nums[$int % 10]; 
    $int = (int)($int / 10); 
} 
$result = strrev($string);
0
répondu Brendan 2018-01-19 04:26:10
$a = "7.2345";
$b = round(((float)$a),0);
-2
répondu user1904765 2013-01-01 10:59:01

Approche Différente:

  1. poussez le tout dans un tableau / tableau associatif.
  2. {[0] } éventuellement le décoder
  3. ?
  4. le profit!
-5
répondu Tiny Giant 2015-12-10 02:15:00