PHP-比较2个浮点值时出现奇怪的结果

PHP-比较2个浮点值时出现奇怪的结果,php,compare,Php,Compare,我试图比较PHP中的两个值 我的逻辑是: 我有一个剩余金额(a) 我有一笔费用(b) 我通过(a-b)计算剩余的 充电操作后,我得到实际剩余值(c) 我将#3中的值与(c)进行比较 尽管两者相似,但PHP表示它们并不相等 下面是我的代码(带填充值) 我将值强制转换为float,但是var\u dump返回FALSE 有人能帮我找出原因吗 我使用的是PHP5.6 提前谢谢 使用var\u dump(abs(floatval($actual\u resident\u amount\u after

我试图比较PHP中的两个值

我的逻辑是:

  • 我有一个剩余金额(a)
  • 我有一笔费用(b)
  • 我通过(a-b)计算剩余的
  • 充电操作后,我得到实际剩余值(c)
  • 我将#3中的值与(c)进行比较
  • 尽管两者相似,但PHP表示它们并不相等

    下面是我的代码(带填充值)

    
    
    我将值强制转换为
    float
    ,但是
    var\u dump
    返回
    FALSE

    有人能帮我找出原因吗

    我使用的是PHP5.6

    提前谢谢

    使用var\u dump(abs(floatval($actual\u resident\u amount\u after\u payment)==floatval($resident\u amount\u after\u payment))=0)

    答对了

    经过几次尝试,我终于抓住了猎物。我快疯了

    “问题”在右舍入值内

    $remaining_amount_before_payment = floatval("600"); // use floatval istead of (float)
    $remaining_amount_after_payment = round($remaining_amount_before_payment - floatval("387.60"), 2);// use floatval istead of (float) and round result
    $actual_remaining_amount_after_payment = floatval("212.4");// use floatval
    echo "actual_remaining_amount_after_payment: {$actual_remaining_amount_after_payment} <br><br>";
    echo "remaining_amount_after_payment: {$remaining_amount_after_payment} <br><br>";
    
    var_dump( $actual_remaining_amount_after_payment === $remaining_amount_after_payment ); // return TRUE
    
    付款前的剩余金额=floatval(“600”)//使用floatval istead of(float)
    付款后的剩余金额=四舍五入(付款前的剩余金额-浮动值(“387.60”),2);//使用floatvalistead of(float)和舍入结果
    美元实际余额付款后的金额=浮动价(“212.4”);//使用floatval
    回显“付款后的实际剩余金额:{$actual\u Resisting\u amount\u after\u payment}

    ”; 回显“付款后剩余金额:{付款后剩余金额}

    ”; var_dump($actual_剩余_amount_after_payment===$Resisting_amount_after_payment);//返回真值


    您的变量“付款后的剩余金额”不是真实的212.4

    使用var_导出来确定其值。
    在我看来,您应该将浮点值“四舍五入”到一个精度。作为比较

    a)你为什么首先把数字写成字符串?绝对没有理由这样做。b) 你知道浮点运算不精确吗?你知道并且读过这本书吗?c) 正如你自己所说:“尽管两者相似,但PHP说它们不相等。”-你知道“相似”和“相等”是不一样的吗?;)因为我得到的实际值来自API,它们是字符串!这就是为什么我将它们转换为
    float
    ,因为我无法控制API响应!我不知道你说的(b)点。使用
    float
    进行类型转换不好吗?
    $remaining_amount_before_payment = floatval("600"); // use floatval istead of (float)
    $remaining_amount_after_payment = round($remaining_amount_before_payment - floatval("387.60"), 2);// use floatval istead of (float) and round result
    $actual_remaining_amount_after_payment = floatval("212.4");// use floatval
    echo "actual_remaining_amount_after_payment: {$actual_remaining_amount_after_payment} <br><br>";
    echo "remaining_amount_after_payment: {$remaining_amount_after_payment} <br><br>";
    
    var_dump( $actual_remaining_amount_after_payment === $remaining_amount_after_payment ); // return TRUE