Question Comment puis-je convertir une chaîne en nombre en PHP?


Je veux convertir ces types de valeurs, '3', '2.34', '0.234343', etc. à un 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

419
2017-12-16 04:08


origine


Réponses:


Vous n'avez généralement pas besoin de faire cela, car PHP va forcer le type pour vous dans la plupart des cas. Pour les situations où vous voulez convertir explicitement le type, jeter il:

$num = "3.14";
$int = (int)$num;
$float = (float)$num;

618
2017-12-16 04:13



Il y a plusieurs façons de le faire:

  1. Convertissez les chaînes en types de données primitifs numériques:

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

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

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


112
2017-12-16 04:12



Quel que soit le langage (peu typé), vous pouvez toujours convertir une chaîne en nombre en lui ajoutant un zéro.

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

Notez que vous souhaiterez peut-être conserver les nombres en pointillés comme des chaînes, car après avoir été lancés pour flotter, ils peuvent être modifiés de manière imprévisible, en raison de la nature des nombres flottants.


45
2017-12-16 04:52



Pour éviter les 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
?>

31
2018-06-02 13:28



Vous pouvez utiliser:

(int)(your value);

Ou vous pouvez utiliser:

intval(string)

23
2017-12-16 04:13



Si vous voulez flotter pour $value = '0.4', mais int pour $value = '4', tu peux écrire:

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

Un peu sale, mais ça marche.


17
2017-09-15 04:44



Vous pouvez utiliser (int)_value_ par exemple.

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

Voir Type Jongler.


14
2018-04-16 03:32



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


11
2017-12-16 04:11



Juste une petite note aux réponses qui peuvent être utiles et plus sûres dans certains cas. Vous voudrez peut-être vérifier si la chaîne contient une valeur numérique valide en premier et la convertir ensuite uniquement en un type numérique (par exemple, si vous devez manipuler des données provenant d'une base de données convertissant des ints en chaînes). Vous pouvez utiliser is_numeric() et alors floatval():

$a = "whatever"; // any variable

if (is_numeric($a)) 
    var_dump(floatval($a)); // type is float
else 
    var_dump($a); // any type

10
2017-08-10 17:16



Vous pouvez toujours ajouter zéro à cela!

Input             Output
'2' + 0           2 (int)
'2.34' + 0        2.34 (float)
'0.3454545' + 0   0.3454545 (float)

9
2017-07-18 08:13