我有这个密码
private function calculateDefferedRevenue($price, $sub) { $defferedrevenue = '0.00'; if ($sub->has('fulfillment') && is_object($sub->fulfillment)) { $fulfillments = $sub->fulfillment; foreach ($fulfillments as $key => $fulfillment) { if ($fulfillment->has('shipments') && !is_null($fulfillment->shipments)) { $counts = self::countShipments($fulfillment->shipments); if (!empty($price) && $counts['shipmentCount'] > 0) { $shippingFee = self::getShippingFee($sub); $shippingFees = $counts['unshippedCount'] * $shippingFee; $price = self::deductUsingCoupon($price, $sub); $eachShipmentAmount = $price / $counts['shipmentCount']; $revenue = $eachShipmentAmount * $counts['unshippedCount']; $revenue = $revenue + $shippingFees; $defferedrevenue = $defferedrevenue + $revenue; $defferedrevenue = number_format($defferedrevenue, 2); } } } } return $defferedrevenue; }
这些是sentry在运行laravel队列作业中的ABOVE行后返回的一组值
{ counts: { shipmentCount: 4, shippedCount: 1, unshippedCount: 3 }, defferedrevenue: 1,049.25, eachShipmentAmount: 349.75, key: 1, price: 1399.00, revenue: 1049.25, shippingFee: 0.00, shippingFees: 0, sub: Object Subscription }
php为什么这么说 A non well formed numeric value encountered 在这条线上
A non well formed numeric value encountered
$defferedrevenue = $defferedrevenue + $revenue;
你在用 number_format() 此处可能会添加逗号:
number_format()
$defferedrevenue = $defferedrevenue + $revenue; $defferedrevenue = number_format($defferedrevenue, 2);
因此,在下一次循环迭代中,您可能会得到如下结果:
$defferedrevenue = "1,234" + 1;
这会生成一个通知,因为“1234”是一个不能自动解释为数字的字符串。扔掉那些垃圾就行了 数字_格式() 从循环内部划线,并将其放在循环结束后:
数字_格式()
return number_format($defferedrevenue, 2);