很像这个网站,我目前的项目有声誉和脚本,我的工作,我需要计算两个用户的声誉之间的比率。
$attacker->ratio = $defender->rep / $attacker->rep; $defender->ratio = $attacker->rep / $defender->rep;
在这样做的时候,我可能偶尔会以除数的声誉为0而告终,这太糟糕了!显然,我可以添加几个检查,但我想知道是否还没有发明一个更漂亮的解决方案,像@前面的东西,但我知道这不是一个好主意。
@
qcuzuvrc1#
假设正数有效,则确保最小除数值为1。
$defender->ratio = $attacker->rep / max($defender->rep, 1);
//― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ―别人建议的代码@php_nub_qq建议的替代代码...在今天的PHP中
$defender->ratio = $attacker->rep / ($defender->rep ?? 1);
唉,@php_nub_qq提供的这段代码在PHP 7. 4中不起作用;- (见评论中的@OceanBt ......感谢他们的纠正!:)所以,在这里我维护的代码,我从来没有感兴趣。现在,显示为PHP版本特定!这里是更正...
$y = 100/($x ?: 1);
我为什么要这么做?1.注意我的代码仍然工作正常!避免在生产代码中使用"聪明的特性"。1.因为有些人认为有一个"更好的答案"并不意味着他们这样做!我不介意做这个维护别人的代码!这是现实世界!我们必须这样做。我发布它是因为:我真的在努力帮助程序员学习。//我对我发布的内容的"改进"的想法...imo,你的建议和我的方法不一样!我特别使用了'max',因为它强制限制了一个数字的范围。你可以嵌套'min'和'max'函数来强制限制范围。你的方法是一种"选择",而不是我为什么要做我做的答案
ugmeyewa2#
我会这么做。
$defender->ratio = ($defender->rep === 0) ? 0 : $attacker->rep / $defender->rep;
oyt4ldly3#
如果您使用的是PHP 5.3以上版本,则可以使用三元运算符?:
?:
$attacker->ratio = $defender->rep / ($attacker->rep ?: 1); $defender->ratio = $attacker->rep / ($defender->rep ?: 1);
这意味着,如果运算符前面的变量为false或空,则将返回后面的值,否则将返回第一个值示例如下:
$attacker->rep = 0; $defender->rep = 55; $attacker->ratio = $defender->rep / ($attacker->rep ?: 1); // returns 55 / 1 = 55 $defender->ratio = $attacker->rep / ($defender->rep ?: 1); // returns 0 / 55 = 0
inn6fuwd4#
像这样?
if($defender->rep != 0){ $attacker->ratio = $defender->rep / $attacker->rep; }
lhcgjxsq5#
使用三元运算符检查除数是否为零。
$attacker->ratio = $attacker->rep > 0 ? $defender->rep / $attacker->rep : 1; $defender->ratio = $defender->rep > 0 ? $attacker->rep / $defender->rep : 1;
使用任何您想要的值代替默认值1。
1
pxq42qpu6#
根据其他答案,我假设您只在比率不为零时才更新比率(请记住,您要求的是优雅而不是清晰):
if( !empty($attacker->rep) ) { $attacker->ratio = $defender->rep / $attacker->rep; }
PHP将0视为空。
htzpubme7#
我不建议你仅仅为了计算结果而人为地改变用户的声誉,相反,你可以这样做:
function calc_rep_ratio($self, other) { if ($self->rep != 0) { return $other->rep / $self->rep; } else { return NAN; } }
然后使用函数
$defender->ratio = calc_rep_ratio($defender, $attacker); $attacker->ratio = calc_rep_ratio($attacker, $defender);
在演示文稿中,您可以检查编号
if (is_nan($user->ratio)) { echo 'No ratio available'; } else { echo $user->ratio; }
e4eetjau8#
要防止出现错误消息,请尝试
try { return $a/$b; } catch (DivisionByZeroError $e) { echo 'Error DivisionByZeroErro'; }
8条答案
按热度按时间qcuzuvrc1#
假设正数有效,则确保最小除数值为1。
//― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ― ―
别人建议的代码
@php_nub_qq建议的替代代码...
在今天的PHP中
唉,@php_nub_qq提供的这段代码在PHP 7. 4中不起作用;- (见评论中的@OceanBt ......感谢他们的纠正!:)
所以,在这里我维护的代码,我从来没有感兴趣。现在,显示为PHP版本特定!这里是更正...
我为什么要这么做?
1.注意我的代码仍然工作正常!避免在生产代码中使用"聪明的特性"。
1.因为有些人认为有一个"更好的答案"并不意味着他们这样做!
我不介意做这个维护别人的代码!这是现实世界!我们必须这样做。我发布它是因为:
我真的在努力帮助程序员学习。
//我对我发布的内容的"改进"的想法...
imo,你的建议和我的方法不一样!我特别使用了'max',因为它强制限制了一个数字的范围。你可以嵌套'min'和'max'函数来强制限制范围。
你的方法是一种"选择",而不是我为什么要做我做的答案
ugmeyewa2#
我会这么做。
oyt4ldly3#
如果您使用的是PHP 5.3以上版本,则可以使用三元运算符
?:
这意味着,如果运算符前面的变量为false或空,则将返回后面的值,否则将返回第一个值
示例如下:
inn6fuwd4#
像这样?
lhcgjxsq5#
使用三元运算符检查除数是否为零。
使用任何您想要的值代替默认值
1
。pxq42qpu6#
根据其他答案,我假设您只在比率不为零时才更新比率(请记住,您要求的是优雅而不是清晰):
PHP将0视为空。
htzpubme7#
我不建议你仅仅为了计算结果而人为地改变用户的声誉,相反,你可以这样做:
然后使用函数
在演示文稿中,您可以检查编号
e4eetjau8#
要防止出现错误消息,请尝试