NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Money for Laravel

Zaokrúhľovanie a pomocné triedy

Všetko zaokrúhľovanie používa natívny enum \RoundingMode z PHP 8.4 — ten istý, ktorý prijíma round() aj bcround(). Hodnotové objekty majú ako konštantu predvolený HalfAwayFromZero a konfiguráciu nečítajú; služby čítajú money.rounding (formátovač, avgMoney) a money.exchange.rounding (prevody).

RoundingModeHodnota v konfigurácii2.5-2.51.6-1.1
HalfAwayFromZerohalf_away_from_zero3-32-1
HalfTowardsZerohalf_towards_zero2-22-1
HalfEvenhalf_even2-22-1
HalfOddhalf_odd3-32-1
TowardsZerotowards_zero2-21-1
AwayFromZeroaway_from_zero3-32-2
PositiveInfinitypositive_infinity3-22-1
NegativeInfinitynegative_infinity2-31-2
use RoundlyConsulting\Money\Percentage;
use RoundlyConsulting\Money\Ratio;

$ten = Money::ofMajor('10', 'EUR');

$ten->divide(3);                                  // 3.33 EUR (HalfAwayFromZero)
$ten->divide(3, RoundingMode::PositiveInfinity);  // 3.34 EUR
$ten->multiply(Ratio::of(2, 3));                  // 6.67 EUR — exact ratio, one rounding
$ten->percentage(Percentage::fromBasisPoints(850)); // 0.85 EUR (8.5 %)

Ratio::of('1.0854');                // 5427/5000
Ratio::of(1, 3)->toDecimal(4);      // "0.3333"
Ratio::of(1, 3)->toExactDecimal();  // null — does not terminate
Percentage::of('8.5')->basisPoints(); // 850

Ratio a Percentage

Ratio je presný zlomok — skrátený, s kladným menovateľom a členmi do 80 číslic. Percentage je nezáporné desatinné percento s najviac 6 desatinnými miestami (Percentage::of(), fromBasisPoints(), fromRatio()). Oba vstupujú do multiply(), divide() a percentage() bez jediného floatu.

MinorUnits

Pomocné metódy bez meny pre kredity, body a sumy z SDK poskytovateľov — na vstupe int|string, na výstupe reťazce, škály 0..36:

use RoundlyConsulting\Money\Math\MinorUnits;

MinorUnits::normalize('007');          // "7"
MinorUnits::toDecimal(123450, 2);      // "1234.50"
MinorUnits::fromDecimal('10.5', 2);    // "1050" — excess precision needs a rounding mode
MinorUnits::rescale(123450, 2, 0);     // "1235"
MinorUnits::toInt('6747');             // 6747 — throws AmountOverflow outside int64

Zaokrúhľovanie z vlastnej konfigurácie

RoundingModes prevádza hodnoty z konfigurácie v snake_case na enum. Nenastavená hodnota (null alebo prázdna) dostane voliteľnú predvolenú hodnotu z tretieho argumentu, inak vyhodí výnimku. Čokoľvek iné — vrátane nejednoznačného half_up — vyhodí InvalidMoneyConfiguration s názvom kľúča:

use RoundlyConsulting\Money\Support\RoundingModes;

RoundingModes::fromValue(config('shop.rounding'), 'shop.rounding'); // RoundingMode
RoundingModes::fromValue(config('shop.rounding'), 'shop.rounding', RoundingMode::HalfEven); // null or blank → HalfEven
RoundingModes::fromConfig('money.rounding');                        // RoundingMode::HalfAwayFromZero
RoundingModes::toValue(RoundingMode::HalfEven);                     // "half_even"

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.