PHPackages                             customergauge/remainder - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. customergauge/remainder

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

customergauge/remainder
=======================

Largest Remainder Method calculation

1.1.1(5y ago)017.4k↓35.7%[1 issues](https://github.com/cgauge/php-largest-remainder-method/issues)MITPHPPHP &gt;=7.1

Since Jul 14Pushed 5y ago11 watchersCompare

[ Source](https://github.com/cgauge/php-largest-remainder-method)[ Packagist](https://packagist.org/packages/customergauge/remainder)[ RSS](/packages/customergauge-remainder/feed)WikiDiscussions 1.0 Synced 1mo ago

READMEChangelog (3)Dependencies (1)Versions (4)Used By (0)

Largest Remainder Method ➗
==========================

[](#largest-remainder-method-)

This library provides a simple way to calculate percentages using the Largest Remainder Method. [Learn more](https://en.wikipedia.org/wiki/Largest_remainder_method).

Installation
------------

[](#installation)

```
composer require customergauge/remainder
```

Usage
-----

[](#usage)

```
use CustomerGauge\Math\Remainder\Remainder;

$remainder = new Remainder([1, 1, 1]);

$remainder->round(2); // [0.34, 0.33, 0.33]
```

In simple terms, the goal of the Largest Remainder Method is to make sure that when calculating the weight of each *seat* in the data set, the aggregated percentage will not be 99.99 or 100.01.

The first example above is arbitrary and end up rounding up only the first record so that `0.34 + 0.33 + 0.33 = 1`, however not always the decision is arbitrary.

```
use CustomerGauge\Math\Remainder\Remainder;

$remainder = new Remainder([92, 93, 70]);

$remainder->round(2); // [0.36, 0.37, 0.27]
```

As we can see, `0.36 + 0.37 + 0.27 = 1`, however using standard rounding, the result would have been different. To demonstrate that, let's calculate `92 + 93 + 70 = 255`. Each value takes the following percentage of the whole:

ValuePercentageRoundLargest Remainder Method920.36078431370.360.36930.36470588230.360.37700.27450980390.270.27As we can see from the table above, standard rounding end up losing one percentage point because all three numbers round down. The Largest Remainder Method will scan the values that will be discarded (**0.36**07843137, **0.36**47058823, **0.27**45098039) and prioritize the ones with the largest contribution. In this case, the 2nd value will discard `47058823`, which is the largest value discarded. That makes it viable for round up to fill the gap.

The fact that `93` is also the largest value does not necessarily have a direct connection to the option being rounded up. We can try the same example again using a much smaller number. Take `92 + 32 + 70 = 194`.

ValuePercentageRoundLargest Remainder Method920.47422680410.470.47320.16494845360.160.17700.36082474220.360.36

###  Health Score

30

—

LowBetter than 64% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity25

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~50 days

Total

4

Last Release

1985d ago

PHP version history (2 changes)1.0.0PHP ^7.1

1.0.x-devPHP &gt;=7.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/0325707319c1497846deddeb429fef8d7510c299c2e764d7e5a05b198fcb4d28?d=identicon)[Deleu](/maintainers/Deleu)

---

Top Contributors

[![deleugpn](https://avatars.githubusercontent.com/u/9533181?v=4)](https://github.com/deleugpn "deleugpn (10 commits)")

---

Tags

hacktoberfestmathphproundingmethodlargestremainderHareNiemeyerHamiltonVinton

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/customergauge-remainder/health.svg)

```
[![Health](https://phpackages.com/badges/customergauge-remainder/health.svg)](https://phpackages.com/packages/customergauge-remainder)
```

###  Alternatives

[rybakit/arguments-resolver

ArgumentsResolver allows you to determine the arguments to pass to a function or method.

26107.7k7](/packages/rybakit-arguments-resolver)[cleaniquecoders/blueprint-macro

Laravel Blueprint Macro

164.6k6](/packages/cleaniquecoders-blueprint-macro)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
