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
29 réponses
, Il existe quelques façons de le faire:
-
Convertit les chaînes en types de données primitives numériques:
$num = (int) "10"; $num = (double) "10.12"; // same as (float) "10.12";
-
Effectuer des opérations mathématiques sur les chaînes:
$num = "10" + 1; $num = floor("10.1");
-
Utiliser
intval()
oufloatval()
:$num = intval("10"); $num = floatval("10.1");
Utilisation
settype()
.
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.
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
?>
Vous pouvez utiliser:
(int)(your value);
Ou vous pouvez utiliser:
intval(string)
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.
Vous pouvez utiliser (int)_value_
par exemple.
$string = '100';
$int = (int)$string;
Voir Type Jonglage .
Dans PHP vous pouvez utiliser intval(string) or floatval(string)
fonctions pour convertir des chaînes en nombres.
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)
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
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;
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.
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';
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;
}
}
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)
, 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;
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
?>
$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 .
, 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.
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)
PHP le fera pour vous dans les limites
<?php
$str="3.148";
$num=$str;
printf("%f\n", $num);
?>
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";
}
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:
Pour convertir une chaîne numérique en nombre, procédez comme suit:
$a = +$a;
Vous pouvez simplement utiliser la fonction intval() pour convertir une chaîne en int
Vous pouvez simplement écrire comme ceci:
<?php
$data = ["1","2","3","4","5"];
echo json_encode($data, JSON_NUMERIC_CHECK);
?>
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);
Approche Différente:
- poussez le tout dans un tableau / tableau associatif.
- {[0] } éventuellement le décoder
- ?
- le profit!