避免划分错误Laravel框架

时间:2015-09-24 07:45:27

标签: laravel-5

我正在尝试计算Laravel网站上的一些统计数据...但是当我执行以下代码时,它会给我一个“零除错误”'

我理解为什么因为没有记录所以计算是0除0

有没有办法,如果它为零回应' 0'而不是抛出那个错误

Controlller

    private function getAverageOddsForLastMonth()
{
    $firstDayOfLastMonth = new Carbon('first day of last month');
    $lastDayOfLastMonth = new Carbon('last day of last month');

    $tipslastmonth = Tip::whereBetween('tip_date',
        [
            $firstDayOfLastMonth,
            $lastDayOfLastMonth
        ]
    )->count();

    $sumOfTheOddsLastMonth = Tip::whereBetween('tip_date',
        [
            $firstDayOfLastMonth,
            $lastDayOfLastMonth
        ]
    )->sum('odds');

    return ($sumOfTheOddsLastMonth / $tipslastmonth);
}

3 个答案:

答案 0 :(得分:10)

只需添加一个简单的条件:return $tipslastmonth == 0 ? 0 : ($sumOfTheOddsLastMonth / $tipslastmonth);

答案 1 :(得分:1)

这是一个简单的方法。

我没有在每次除法运算之前使用条件子句来测试零值,而是使用自定义助手在整个应用程序中全局执行此操作并捕获除以零。这样我就不必担心我是否在我使用除法的每个地方都得到了正确的筛选代码,而且我可以在全局范围内轻松地将其关闭或打开以进行调试。这比您想象的要容易得多。

创建一个空白文件,您将在其中拥有您希望在整个应用程序中通用的自定义函数,并将其命名为 helpers.php。我把我的放在 app/Helpers/helpers.php,但很多人把他们的放在 app/helpers.phpapp/Http/helpers.php。只要您像这样在您的 composer.json 自动加载部分中正确列出它(显示我的位置),就没有关系:

  "autoload": {
    "classmap": [
      "database"
    ],
    "psr-4": {
      "App\\": "app/"
    },
    "files": [
      "app/Helpers/helpers.php"
    ]
  },

这只是确保您的通用辅助函数已预加载并在整个应用程序中可用。保存 composer.json 后,在命令行终端中执行 composer dump-autoload 以进行设置。

在新的空白 helpers.php 文件中,只需添加以下内容

<?php

if (! function_exists('divnum')) {

        function divnum($numerator, $denominator)
        {
            return $denominator == 0 ? 0 : ($numerator / $denominator);
        }

    }

正确的协议要求我们检查以确保没有与我们的新助手同名的函数正在使用中。这不太可能,但你使用了很多你不知道的包 - 最好检查一下以确保安全。因此,我们首先检查我们的新函数名称是否存在

我们的函数divnum()现在简单地将我们给定的任意两个数相除,确保如果分母(除数)为零,我们不进行除法和而是返回零答案。如果分母是安全的 (!=0),则返回正确的除法答案。这样我们就可以避免因除以零错误而崩溃。

像这样使用它:

$answer = divnum($number1, $number2);

示例:

$answer = divnum(20,5);  //sets $answer variable to 4

$answer = divnum(20,0);  //sets $answer variable to 0 

因此,在此之前,您会得到以下内容的除以零错误:

$number1 = 2300;
$number2 = 0;
$answer = $number1/$number2;  //Your app crashes as you're dividing by zero

这就是您以后在整个应用中进行除法的方式:

$number1 = 2300;
$number2 = 0;
$answer = divnum($number1,$number2);  //Your app continues without error and $answer as zero

一旦你设置了这个简单的助手,之后的编码差异就可以忽略不计,你再也不用担心被零除。

答案 2 :(得分:0)

  • 如您所知,发生此错误是因为变量中的值为0。 做
if($tipslastmonth != 0)     
    $tipslastmonth = $sumOfTheOddsLastMonth / $tipslastmonth;  
else     
    $tipslastmonth = 0;
  1. 当不出现0时,其他部分将与我的项目一起正常运行