Skip to content

Commit cb974e8

Browse files
committed
Adds modulus (remainder) method
1 parent 86b6051 commit cb974e8

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/ElliotJReed/Maths/Number.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ public function squareRoot(): self
8383
return $this;
8484
}
8585

86+
public function modulus(int | float | string $divisorNumber): self
87+
{
88+
$this->number = \bcmod($this->number, (string) $divisorNumber, $this->precision);
89+
90+
return $this;
91+
}
92+
8693
public function isLessThan(int | float | string $number): bool
8794
{
8895
$result = \bccomp($this->number, (string) $number, $this->precision);

tests/ElliotJReed/Maths/NumberTest.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,39 @@ public function testItReturnsTheSquareRootWhenBaseNumberIsAnInteger(): void
525525
$this->assertSame(5, $number->asInteger(\PHP_ROUND_HALF_DOWN));
526526
}
527527

528+
public function testItReturnsModulusWhenBaseNumberIsAnInteger(): void
529+
{
530+
$number = new Number(5);
531+
$number->modulus(3);
532+
533+
$this->assertSame('2', $number->asString());
534+
$this->assertSame(2.0, $number->asFloat());
535+
$this->assertSame(2, $number->asInteger());
536+
$this->assertSame(2, $number->asInteger(\PHP_ROUND_HALF_DOWN));
537+
}
538+
539+
public function testItReturnsModulusWhenBaseNumberIsAFloat(): void
540+
{
541+
$number = new Number(5.5);
542+
$number->modulus(2.5);
543+
544+
$this->assertSame('0.5', $number->asString());
545+
$this->assertSame(0.5, $number->asFloat());
546+
$this->assertSame(1, $number->asInteger());
547+
$this->assertSame(0, $number->asInteger(\PHP_ROUND_HALF_DOWN));
548+
}
549+
550+
public function testItReturnsModulusWhenBaseNumberIsAString(): void
551+
{
552+
$number = new Number('5.5');
553+
$number->modulus('2.5');
554+
555+
$this->assertSame('0.5', $number->asString());
556+
$this->assertSame(0.5, $number->asFloat());
557+
$this->assertSame(1, $number->asInteger());
558+
$this->assertSame(0, $number->asInteger(\PHP_ROUND_HALF_DOWN));
559+
}
560+
528561
public function testItReturnsTrueWhenNumberIsLessThanTheBaseNumberWhenCheckingIfNumberIsLessThanBaseNumber(): void
529562
{
530563
$number = new Number('100.01');

0 commit comments

Comments
 (0)