在一个数字范围内进行加法和减法运算,并循环四舍五入


Adding and subtracting within a range of numbers and looping round

我想知道如何在一个设定的范围内进行数字的加法和减法运算,以及如何循环回它们自己,下面的例子;

范围:1-10

所以,如果我现在有了数字7并加上5,我会希望数字变成2

8,9,10,循环到1,2。

同样,如果我减去,那么我有数字3,我减去4,那么我应该剩下9。

2,1,循环到10,9

我希望这是有道理的。

谢谢。

您可以使用%运算符。

它计算除法后的余数。

例如:

$d = 10;
$x = 7;
$y = 5;
echo ($x + $y) % $d;

给出CCD_ 1;

对于负值,您只需删除MINUS

使用模数运算符。

result = (a + b) % 10;

您可以使用类似(7+5)%10=2 的模函数

试试这个:

$range = range(1,10);
$min = min($range);
$max = max($range);
function operate( $a, $b, $operation ) {
    global $max, $min;
    switch( $operation ) {
        case '+':
            $a += $b;
            break;
        case '-':
            $a -= $b;
            break;
    }
    if( $a < $min ) {
        return $max + $a;
    } else if( $a > $max ) {
        return $a - $max;
    }
}

希望能有所帮助。

您可以使用类似的代码来完成此操作

$range = array('from' => 3, 'to' => 13);
$dist = $range['to'] - $range['from'];
$a = 7;
$b = 14;
echo ($dist + ($a % $range['to'] - $b % $range['to'])) % $dist; // $a - $b
echo ($dist + ($a % $range['to'] + $b % $range['to'])) % $dist; // $a + $b

Modulo会像其他人所展示的那样完成任务,但您也必须考虑到范围的低端。

例如,循环一个小时范围内的任意值将起作用,因为它是基于零的。但是,如果你想在一个月的范围内循环一个值,你会在最后一天遇到麻烦,因为:

31%31=0

因此,当你应该保持在31时,你将循环到零。

要处理任何范围,你需要这样做:

$min = 5;
$max = 15;
$value = 25; // The range is 11, so we want this turned into 14
$range = $max - $min + 1;
$value = (($value-$min) % $range) + $min;

处理低于最小值的值:

$range = $max - $min + 1;
$value = ($min - $value) % $range;
$value = $max - ($value - 1);