我希望有人能看到我哪里出錯了。我有 3 個定價值projectBudget, projectOverflow, projectTotal,我要做的是創建一個檢查,將變數設定為真或假。因此,如果我projectTotal的值大于projectBudget但小于,那么projectOverflow我需要將我的projectWarning變數設定為 true,但如果我projectTotal的值更大projectBudget并且它更大,那么projectOverflow我需要將我的projectDanger
變數設定為 true,而我的設定projectWarning為 false。
我遇到的問題是 myprojectWarning是 true 并且 myprojectDanger是 false 即使 myprojectTotal更大
projectBudget并且projectOverflow
這是我的代碼
$projectBudget = number_format((float)$project->budget, 2) // 1
$projectOverflow = number_format((float)$project->overflow, 2) // 2
$projectTotal = number_format((float)$project->total, 2) // 1234
$projectWarning = false;
$projectDanger = false;
if($projectTotal > $projectBudget && $projectTotal < $projectOverflow)
{
$projectWarning = true;
}
if($projectTotal > $projectOverflow)
{
$projectDanger = true;
}
dd($projectWarning , $projectDanger);
uj5u.com熱心網友回復:
讓我們僅使用代碼的第一部分來制作一個最小的、可重現的示例:
$project = new class {
public $budget = 1;
public $overflow = 2;
public $total = 1234;
};
$projectBudget = number_format((float)$project->budget, 2); // 1
$projectOverflow = number_format((float)$project->overflow, 2); // 2
$projectTotal = number_format((float)$project->total, 2); // 1234
var_dump($projectBudget, $projectOverflow, $projectTotal);
如果您查看 var_dump 輸出,您會發現不同變數的注釋是錯誤的 - 因為您呼叫number_format了 ,變數現在包含字串"1.00"、"2.00" 和 "1,234.00"。
因此,現在當您比較這些變數時,您正在比較字串,它將查看按字母順序排在第一位的字串 - 顯然不是您想要的。
解決方法很簡單:在實際將數字呈現給用戶之前不要格式化數字。
uj5u.com熱心網友回復:
只需number_format從您的代碼中洗掉。
比較運算子不使用它。
https://www.php.net/manual/en/function.number-format.php
https://stevesohcot.medium.com/how-i-resolved-the-php-error-with-comparing-numbers-using-number-format-5bb081bf94a
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/426304.html
