Php 为什么这个比较的结果是正确的
在这个简单的PHP代码中 为什么php解析器返回truePhp 为什么这个比较的结果是正确的,php,Php,在这个简单的PHP代码中 为什么php解析器返回true $text="51.406ABC917"; $floatval = floatval($text);//51.406 if($floatval==$text){ $result_compare = true;//php parser return true }else{ $result_compare = false; } ==将比较数据,使用===比较数据和数据类型 $floatval==$text 在上面的比较中,您将浮点值与
$text="51.406ABC917";
$floatval = floatval($text);//51.406
if($floatval==$text){
$result_compare = true;//php parser return true
}else{
$result_compare = false;
}
==将比较数据,使用===比较数据和数据类型
$floatval==$text
在上面的比较中,您将浮点值与字符串进行比较
尝试使用==而不是=外观。永远不要比较浮点数是否相等
你需要使用ε技术
例如:
if (abs($forstFloat - $secondFloat) < epsilon) {
echo 'they are equal!!'
if(abs($forstFloat-$secondFloat)
}
其中,epsilon
是常数,表示一个非常小的数字
$a == $b Equal TRUE if $a is equal to $b after type juggling.
$a === $b Identical TRUE if $a is equal to $b, and they are of the same type.
以此为例,
<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
switch ("a") {
case 0:
echo "0";
break;
case "a": // never reached because "a" is already matched with 0
echo "a";
break;
}
?>
试试这个
$text="51.406ABC917";
$floatval = floatval($text);//51.406
if($floatval===$text){
$result_compare = 'true';//php parser return true
}else{
$result_compare = 'failed';
}
逻辑:
$a == $b Equal TRUE if $a is equal to $b after type juggling.
$a === $b Identical TRUE if $a is equal to $b, and they are of the same type.
参考:
操作数2的类型:字符串、资源或数字
将字符串和资源转换为数字,通常是数学 通过向字符串添加类型转换,可以避免转换为float
if((string)$floatval==$text){
$result_compare = true;
}else{
$result_compare = false; //php parser return false
}
试试这个:
<?php
$text="51.406ABC917";
$floatval = floatval($text);//51.406
if(strval($floatval)==$text){
$result_compare = true;//php parser return true
}else{
$result_compare = false;
}
?>
如果字符串的第一部分是数字,它将被转换为数字,否则它将为零(0)。是,要比较变量的值和类型,请使用
==
而不是=
但在您的例子中,您已经通过floatval($text)将字符串转换为float代码>然后===
与==
相同
问题是php如何通过floatval($text)将字符串转换为数字代码>
以下是php如何将字符串转换为数字:
<?php
$foo = 1 + "10.5"; // $foo is float (11.5)
$foo = 1 + "-1.3e3"; // $foo is float (-1299)
$foo = 1 + "bob-1.3e3"; // $foo is integer (1)
$foo = 1 + "bob3"; // $foo is integer (1)
$foo = 1 + "10 Small Pigs"; // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1; // $foo is float (11)
$foo = "10.0 pigs " + 1.0; // $foo is float (11)
?>
这里有完整的文档:PHP通过解析字符串直到找到第一个无效字符(对于浮点数),“如果将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字,并以数字方式执行比较。”还有一件事,永远不要相信,特别是在php中。如果他这样做了,每次我更改$text=“51.406ABC917”,他都会得到一个文件夹;至$text=“51.406917”;结果是假的,但我希望结果是真的;在这种情况下,使用if($floatval==$text){
到if($string)$floatval===(string)$text){