为什么比较的结果是真的

时间:2014-01-20 07:10:27

标签: 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;
}

9 个答案:

答案 0 :(得分:2)

大概是Type JugglingPHP type comparison tables以及Comparison Operators。检查一下。

  

操作数1的类型:字符串,资源或编号
  操作数2的类型:字符串,资源或编号
  将字符串和资源转换为数字,通常的数学。

您可以通过向字符串添加类型转换来避免转换为浮动。

if((string)$floatval==$text){
$result_compare = true;
}else{
$result_compare = false; //php parser return false
}

答案 1 :(得分:0)

==将比较数据,使用===来比较数据和数据类型

答案 2 :(得分:0)

$floatval==$text

在上面的比较中,您将浮点值与字符串

进行比较

尝试 === 而不是 ==

答案 3 :(得分:0)

here。你永远不应该比较浮点数是否相等。

您需要使用epsilon技术。

例如:

if (abs($forstFloat - $secondFloat) < epsilon) { 
   echo 'they are equal!!'

}

其中epsilon是常量,代表一个非常小的数字。

答案 4 :(得分:0)

$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;
}
?>

Reference

答案 5 :(得分:0)

试试这个,

    $text="51.406ABC917";
    $floatval = floatval($text);//51.406
    if($floatval===$text){
        $result_compare = 'true';//php parser return true
    }else{
        $result_compare = 'failed';
    }

LOGIC:

$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.

参考:http://www.php.net/manual/en/language.operators.comparison.php

答案 6 :(得分:0)

  1. 在比较之前,$ text被转换为float,结果与floatval()相同, 然后你比较$ floatval == $ text,所以结果非常可预测 - TRUE

    这是正常的,当您比较来自2种不同类型的变量时,首先将它们转换为最接近的相同类型。

  2. 我建议,在比较float时,使用类似的构造

    if(abs($ floatval - floatval($ text))&lt; 0.001){..}

    比较2个浮点数之间的差异,而不是它们。因为如果你有2个数字, 45 45.00001 ,php会认为它们不同。

  3. 你想要完成什么?为什么你认为这个结果是错的?

答案 7 :(得分:0)

试试这个:

<?php
$text="51.406ABC917";
$floatval = floatval($text);//51.406
if(strval($floatval)==$text){
    $result_compare = true;//php parser return true
}else{
    $result_compare = false;
}
?>

答案 8 :(得分:0)

如果字符串的第一部分是数字,它将被转换为数字,否则它将为零(0)。是的,要比较变量的值和类型,请使用===代替==

但在你的情况下,你已经将字符串转换为floatval($text);,然后=====相同。

问题是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)     
?>

此处的完整文档:http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion