PHP比较浮点值

时间:2016-01-13 14:28:18

标签: php mysqli pdo comparison

比较两个PHP值时遇到问题。第一个值作为查询字符串中的参数传递,而第二个参数是sql查询的结果。

我在这里需要的逻辑是比较两个值,这样如果用户有足够的信用,他的付款就可以处理,否则会显示错误信息。

这是我的代码:

public function storeNewTicket($userId, $amount, $validity) {

        $currentBalance = $this->getBalance($userId);
        $floatCurrentBalance = floatval($currentBalance);
        $floatAmount = floatval($amount);


        if ($floatCurrentBalance > $floatAmount) {

            /*Proceed with the insert*/
        }
        else {
            echo "You don't have enough credit to process this payment."
        }
    }

在同一个名为getBalance()的文件中的单独函数中,我从另一个表中获取用户的当前余额并将其作为对象返回。我100%确定这是有效的。这是代码:

public function getBalance($userId) {

    $stmt = $this->conn->prepare("SELECT balance FROM userbank WHERE UserId = ?");    
    $stmt->bind_param("s", $userId);

    if ($stmt->execute()) {
        $bal = $stmt->get_result()->fetch_assoc();
        $stmt->close();
        return $bal['balance'];
    } else {
        return NULL;
    }
}

代码总是通过else子句并回显:You don't have enough credit to process this payment.;

有人可以帮我理解如何将变量转换为小数或浮点数并进行比较吗?

2 个答案:

答案 0 :(得分:1)

使用浮动时请使用BC Math函数。 要比较浮点数,请使用bccomp

Returns 0 if the two operands are equal, 1 if the left_operand is larger than the right_operand, -1 otherwise.

请注意第三个参数是小数位后的位数。

答案 1 :(得分:0)

我发现问题究竟在哪里。 My getBalance()方法实际上在转换为float时返回值1。 1是数组中记录的位置。将$floatCurrentBalance的声明更改为:$floatCurrentBalance = floatval($currentBalance['balance']);