Maison  >  Article  >  développement back-end  >  Explication détaillée de l'auto-calcul des chaînes PHP et de l'utilisation du calcul numérique

Explication détaillée de l'auto-calcul des chaînes PHP et de l'utilisation du calcul numérique

伊谢尔伦
伊谢尔伦original
2017-06-21 11:27:421748parcourir

Lorsqu'une chaîne est traitée comme une valeur numérique, le résultat et le type sont les suivants :

Si la chaîne ne contient pas '.', 'e' ou 'E' et sa valeur numérique est dans la plage des types entiers (définis par PHP_INT_MAX), la chaîne sera traitée comme entier pour obtenir la valeur. Dans tous les autres cas, la valeur est traitée comme flottante.

Le début de la chaîne détermine sa valeur. Si la chaîne commence par une valeur numérique légale, cette valeur numérique est utilisée. Sinon, sa valeur est 0 (zéro). Les valeurs légales sont constituées d'un signe facultatif, suivi d'un ou plusieurs chiffres (éventuellement avec un point décimal), puis d'une partie exposant facultative. La partie exposant se compose d’un « e » ou d’un « E » suivi d’un ou plusieurs chiffres.

sera converti en entiers comme suit :

[+/-][0-9][*]

Si vous avez déterminé que vous avez besoin d'un entier (nombre à virgule flottante), vous pouvez utiliser intval() (floatval() ) pour convertir d'abord la chaîne en un entier (nombre à virgule flottante), puis effectuer des calculs avec d'autres valeurs. Un. Ajout de chaînes numériques en PHP

[+/-][0-9][.][0-9][e/E][0-9][*]
1. Si deux chaînes n'ont pas de valeur valide au début ou ne sont pas des chaînes numériques, les deux chaînes seront considérées comme 0 lors de leur ajout
$r = '123' + 1;
var_dump($r);// 输出结果 int(124)$r = '123.4' + 1;
var_dump($r);// 输出结果 float(124.4)$r = '1.5e4' + 1;
var_dump($r);// 输出结果 float(15001)$r = '123456789123456789' + 1;
var_dump($r);// 输出结果 float(1.2345678912346E+17)$r = '123abc' + 1;
var_dump($r);// 输出结果 int(124)$r = '123e1abc' + 1;
var_dump($r);// 输出结果 float(1231)$r = '123.abc' + 1;
var_dump($r);//输出结果 float(124)$r = '+123abc' + 1;
var_dump($r);// 输出结果 int(124)$r = '-123abc' + 1;
var_dump($r);// 输出结果 int(-122)$r = 'abc' + 1;
var_dump($r);// 输出结果 int(1)

2. Lors de l'ajout de deux chaînes numériques, les chiffres significatifs sont ajoutés.

3/Si la chaîne contient '.', 'e', ​​'E', elle sera traitée comme un nombre de type float.

$a="abc";
$b="b01";
$a+$b是0

Comparez deux chaînes dans 2.php (6d267e5fab17ea8bc578f9e7e5e1570b ==);

$a="100";
$b="01a";
$a+$b=101;
Deux

comparaisons de chaînes dans 1.php est égal , n'utilisez généralement pas (==), car (==) changera le

type de données d'origine
$a="100";
$b="12.6a";
$a+$b=112.6;
, mais utilisez la série de fonctions strcmp(str1, str2)
$a='10';
$b='12.3e3';
$a+$b同样为float型float(12310)
strcmp($str1,$ str2 ); (strcmp est obligé de se convertir en type

string

à des fins de comparaison).

Mais comparé à (==), le résultat est vraivar_dump($a==$b);C'est donc généralement non utilisé (==) effectue une comparaison de chaînes.

De plus, lors de la comparaison d'un nombre avec une chaîne, la chaîne sera convertie en type int ou float (numberic_string contient '.', 'e', ​​'E').
$a='123';
$b='123.';($b后多了一个小数点)

2. Comparaison de ( > < )

2-1 : S'il s'agit d'une comparaison de deux chaînes, comparez les codes ascii des caractères correspondants un par un.

2-2 : Si des nombres sont comparés à des chaînes, les chaînes sont d'abord converties en nombres puis comparées.

2-3 : Si deux chaînes numériques (chaînes numériques pures) sont comparées, les deux chaînes sont d'abord converties en nombres puis comparées.
‘abc’转化为int(0);
‘12ab’转化为int(12);
‘12.3e3&#39;转化为float(12300);

Mais

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn