代码之家  ›  专栏  ›  技术社区  ›  Fil

laravel 5.5中遇到的格式不正确的数值

  •  0
  • Fil  · 技术社区  · 6 年前

    我有这个密码

    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 在这条线上

    $defferedrevenue    = $defferedrevenue + $revenue;
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Alex Howansky    6 年前

    你在用 number_format() 此处可能会添加逗号:

    $defferedrevenue    = $defferedrevenue + $revenue;
    $defferedrevenue    = number_format($defferedrevenue, 2);
    

    因此,在下一次循环迭代中,您可能会得到如下结果:

    $defferedrevenue = "1,234" + 1;
    

    这会生成一个通知,因为“1234”是一个不能自动解释为数字的字符串。扔掉那些垃圾就行了 数字_格式() 从循环内部划线,并将其放在循环结束后:

    return number_format($defferedrevenue, 2);
    
    推荐文章