gpt4 book ai didi

php - 比较值但考虑负值

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:38:06 26 4
gpt4 key购买 nike

我有一个 $total和一个 $balance .余额永远不会大于总数,但两者都可能为负。本质上,我试图查看余额是否介于零和总数之间。

所以,

if (($total < 0 && $balance < $total) || ($total > 0 && $balance > $total)) {
/** BAD **/
}

if (between($total < 0 ? $total : 0, $total < 0 ? 0 : $total, $balance) {
/** BAD **/
}

当然有两种方法可以实现这一点,但是有没有办法减少这里的逻辑量?我确信我应该知道的一些关于数论的“聪明”知识……但我不知道。

我正在使用 PHP,但是比较的原则应该从任何语言/算法翻译过来。

来自评论的反馈

如果total为负数,balance必须为负数且不小于total。如果total为正,balance必须为正且不大于total

也许图片会有所帮助!


Balance : BAD | Allowable -ve balances | Allowable +ve balances | BAD
Total : -5 .. -4 .. -3 .. -2 .. -1 .. 0 .. 1 .. 2 .. 3 .. 4 .. 5

进一步反馈

在“余额永远不会大于总数,但两者都可能为负”的问题中……我说的是幅度,而不是值(value)。我认为我没有说清楚:https://study.com/academy/lesson/what-is-magnitude-definition-lesson-quiz.html

解决方案

基于提供的评论。

<?php

class RangeTest extends \PHPUnit\Framework\TestCase
{
/**
* @param int $balance
* @param int $total
* @param bool $expected
*
* @dataProvider provideRangeValues
*/
public function testRange(int $balance, int $total, bool $expected)
{
$this->assertEquals((($total / abs($total)) * ($total - $balance) >= 0), $expected);
}

public function provideRangeValues()
{
return
[
'Positive Balance = Positive Total' => [10, 10, true],
'Positive Balance < Positive Total' => [5, 10, true],
'Positive Balance > Positive Total' => [10, 5, false],
'Negative Balance = Negative Total' => [-10, -10, true],
'Negative Balance < Negative Total' => [-5, -10, true],
'Negative Balance > Negative Total' => [-10, -5, false],
];
}
}

最佳答案

您可以尝试以下方法:

if (  min(1, max(-1, $total)) * ($total - $balance) >= 0 ) {

// all good

基于 OP's comments ,因为总数永远不会为零。我们还可以执行以下操作:

if ( ($total/abs($total)) * ($total - $balance) >= 0 ) {

// all good

关于php - 比较值但考虑负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52498643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com