这是代码;
//calculate parts total
$sqlparts = "SELECT jobNumber, SUM(unitPrice*quantity) AS c FROM s_partOrders WHERE jobNumber = $jobNumber";
$rowparts = mysqli_query($con, $sqlparts) or die('Action failed: ' . mysqli_error($con));
$rsparts = mysqli_fetch_assoc($rowparts);
$partsTotal = $rsparts[c];
if(empty($rsparts[c]))
{
$partsTotal = 0;
}
// calculate payments total
$serviceTotal = $row[costLabour]+$row[costCallout]+$row[costDelivery]+$partsTotal;
$sqlpayments = "SELECT jobNumber, amount, SUM(amount) AS sumAmount FROM s_payments WHERE jobNumber = $jobNumber";
$rowpayments = mysqli_query($con, $sqlpayments) or die('Action failed: ' . mysqli_error($con));
$rspayments = mysqli_fetch_assoc($rowpayments);
$paymentsTotal = $rspayments[sumAmount];
if(empty($rspayments[sumAmount]))
{
$paymentsTotal = 0;
}
$amountDue = $serviceTotal - $paymentsTotal;
$gst = round($serviceTotal/11, 2);
$exGST = $serviceTotal-$gst;
echo "($partsTotal + $row[costLabour] + $row[costCallout] + $row[costDelivery]) - $paymentsTotal = $amountDue";
这是输出结果!
(1850 + 1321.14 + 0 + 0) - 3171.14 = 4.54747350886E-13
不过,这只发生在某些记录上。其他人计算得很完美。有点奇怪!
所有值都存储在数据库中 double
.
最佳答案
哈哈,抱歉,是你,而不是结果,疯狂:)
4.54747350886E-13
本质上是 0
(忽略小数点后第 12 位的精度),这就是 (1850 + 1321.14 + 0 + 0) - 3171.14
计算为。这个结果没有任何问题。
4.54747350886E-13
= 0.0000000000005
关于PHP/SQL 数学带来疯狂的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27559301/