php Laravel框架中的Divide by Zero

cwxwcias  于 2023-09-29  发布在  PHP
关注(0)|答案(4)|浏览(158)

我试图计算我的Laravel网站上的一些统计数据......然而,当我执行以下代码时,它给了我一个'除以零错误'
我理解为什么因为没有记录所以计算是除以
有没有一种方法,如果它eqauls零回显'0',而不是抛出错误
控制器

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);
}
zzoitvuj

zzoitvuj1#

只需要添加一个简单的条件:

return $tipslastmonth == 0 ? 0 : ($sumOfTheOddsLastMonth / $tipslastmonth);
hyrbngr7

hyrbngr72#

  • 如你所知,这个错误的发生是因为你的变量中有0
if($tipslastmonth != 0)     
    $tipslastmonth = $sumOfTheOddsLastMonth / $tipslastmonth;  
else     
    $tipslastmonth = 0;

1.当0不发生其他部分将被执行的工作与我的项目罚款

pbpqsu0x

pbpqsu0x3#

这里有个简单的方法

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

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

"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

一旦您设置了这个简单的帮助器,此后的编码差异就可以忽略不计,您再也不必担心被零除。

w9apscun

w9apscun4#

你可以只使用三元运算符,这就足够了。

$price = 100;
$qty = 0;
$total = $price / ($qty ? $qty : 1);

相关问题