我检查了一个脚本,确保总数是正确的.它的作用是查看存储在数据库中的总数,然后使用其他变量,计算总数应该是多少.
如果这两个值 - 存储的总数和计算的总数 - 不相等,那么这是一个问题所以我希望它发送电子邮件警报.
这是我用来执行此操作的代码片段:
$storedTotal = $row['total']; # Pulls from a varchar field in the database
$calculatedTotal = $subtotal + $tax + $shipping - $deduct;
# Make sure the stored total equals what it should (the calculated total)
if($storedTotal != $calculatedTotal) {
# Send an alert
mail("admin@domain.com","Total check fail","Stored total:$storedTotal \n\n Calculated total:$calculatedTotal \n\n");
}
Run Code Online (Sandbox Code Playgroud)
看起来很简单,但我反复收到来自它的电子邮件,如下所示:
Stored total:23.40
Calculated total:23.40
Run Code Online (Sandbox Code Playgroud)
如您所见,这两个值看起来是一样的.
任何人都可以看到他们没有表现出平等的原因吗?我没有使用严格的相等检查,所以不应该在类型上绊倒.
Aln*_*tak 11
这很可能是一个浮点比较错误 - 可能有一些非常微不足道的数字,默认float -> string转换例程认为不值得打印,但这些数字足以导致比较失败.你会在StackOverflow上找到几十个类似的问题.
由于这些似乎是货币金额,只需检查它们是否在彼此的十分之一小范围内:
$is_equal = (abs($val1 - $val) < 0.001);
Run Code Online (Sandbox Code Playgroud)