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

Sumy a presnosť

Suma v najmenších jednotkách je vždy kanonický celočíselný reťazec: 0 alebo voliteľné mínus a najviac 65 platných číslic (Money::MAX_DIGITS) — bez znamienka plus, úvodných núl, medzier, bodky či exponentu. minor() vracia vždy len túto gramatiku.

$big = Money::ofMinor('123456789012345678901234567890', 'EUR');

$big->digits();      // 30
$big->fitsInt();     // false
$big->minorInt();    // throws AmountOverflow — no silent (int) path

// Never compare raw minors in PHP: numeric strings go through float above int64
$a->minor() > $b->minor();   // unreliable for large amounts
$a->isGreaterThan($b);       // always exact

Money::ofMinor('007', 'EUR')->minor();   // "7" — normalized on entry
Money::ofMinor('5.0', 'EUR');            // throws InvalidAmount — minors are integers
  • Surové sumy nikdy nepretypujte cez (int) ani neporovnávajte v PHP — PHP porovnáva číselné reťazce nad int64 cez floaty. Použite porovnávacie metódy Money.
  • minorInt() je jediný most na int; mimo int64 vyhodí AmountOverflow a fitsInt() vám to povie vopred.
  • JSON prenáša minor ako reťazec: JavaScript poškodí JSON číslo nad 2⁵³.
  • Celočíselné vstupy sa pri vstupe normalizujú („007“ → „7“, „-0“ → „0“); „+5“, „ 5“, „5.0“ a „5e3“ vyhodia InvalidAmount.

Limity

HranicaHodnotaVýnimka
Číslice najmenších jednotiek v pamäti65AmountOverflow
Číslice desatinného vstupu90InvalidAmount
Vstup parsera (znaky)128InvalidAmount
Počet častí split()1..10 000InvalidAllocation
Škály (MinorUnits, ofScaled, toScaled)0..36InvalidAmount
Exponent vlastnej meny0..18InvalidCurrency
Členy pomeru po skrátení (číslice)80InvalidRatio
Uložené číslice (schema.precision)38InvalidMoneyValue

Databázové stĺpce

$table->money() vytvorí znamienkový stĺpec sumy decimal(P, 0) (P = money.schema.precision, predvolene 38) a stĺpec meny. Decimal dáva natívne číselné ORDER BY, rozsahové filtre aj presné SUM — bigint by vrátil strop int64 a varchar radí „9“ za „10“.

DatabázaStĺpecPDO vrátiMimo rozsahu
PostgreSQLnumeric(38,0)reťazec „1050“chyba numeric_value_out_of_range
MySQL / MariaDBdecimal(38,0)reťazec „1050“Chyba rozsahu v strict móde (non-strict MySQL nie je podporované)
SQLitenumericint 1050Potichu by sa zmenilo na REAL — cast preto odmietne sumy nad int64

Škála je vždy 0 — exponent je v registri mien, takže jeden stĺpec udrží riadky v JPY (0), EUR (2) aj ETH (18). Pre stĺpce veľkosti int64 znížte money.schema.precision na 19; Currency::maxMajorAmount() vráti najväčšiu uložiteľnú sumu:

Currency::of('EUR')->maxMajorAmount(19);   // "99999999999999999.99"

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.