Desatinné kredity a zobrazenie
Kredity sa ukladajú ako celé čísla, aby nevznikali odchýlky pohyblivej čiarky. Desatinné kredity reprezentujete tak, že uloženú hodnotu beriete ako najmenšie jednotky a scale nastavíte na počet desatinných miest — pri scale = 2 znamená uložených 150 hodnotu 1.50 kreditu. Ukladajte a odpisujte najmenšie jednotky; úložisko ostáva bigInteger a základná matematika sa nemení.
Pomocníky zobrazenia
Credits::for($user)->format() naformátuje zostatok jednej skupiny a Credits::format() ľubovoľnú celočíselnú sumu. Obe vracajú čistý desatinný reťazec bez lokalizácie — bez oddeľovačov tisícov; ak ich potrebujete, obaľte výsledok pomocníkom Number z Laravelu:
config(['credits.scale' => 2]);
Credits::for($user)->format(); // the default bucket's balance, e.g. "1234.50"
Credits::for($user)->bucket('promotional')->format(scale: 0, rounding: \RoundingMode::HalfEven);
Credits::format(123450); // "1234.50" — any integer amount, no model neededNa modeli sú ich podobou z traitu displayCreditsBalance() a displayCredits():
config(['credits.scale' => 2]);
$user->modifyCredits(123450); // stores 123450 minor units
$user->displayCreditsBalance(); // "1234.50" (a single bucket's balance)
$user->displayCredits(123450); // "1234.50" (format any integer amount)
$user->displayCredits(-123450); // "-1234.50"
$user->displayCredits(5); // "0.05"Prepísanie škály a zaokrúhľovania
Všetky pomocníky prijímajú voliteľnú škálu pre jedno volanie (počet zobrazených desatinných miest) a režim zaokrúhľovania. Ak je požadovaná škála menšia ako uložená, odrezané číslice sa zaokrúhlia raz podľa režimu — natívneho \RoundingMode, predvolene config('credits.rounding'). displayCreditsBalance() prijíma aj okamih:
$user->displayCredits(123450, scale: 0); // "1235"
$user->displayCredits(123450, scale: 0, rounding: \RoundingMode::HalfTowardsZero); // "1234"
$user->displayCredits(1250, scale: 0, rounding: \RoundingMode::HalfEven); // "12"
$user->displayCredits(1350, scale: 0, rounding: \RoundingMode::HalfEven); // "14"
$user->displayCreditsBalance(bucket: 'promotional', scale: 0, at: now()->subWeek());Všetky režimy zaokrúhľovania podľa názvu v konfigurácii:
| credits.rounding | Argument rounding: | Správanie |
|---|---|---|
half_away_from_zero | \RoundingMode::HalfAwayFromZero | Polovice od nuly (predvolené). |
half_towards_zero | \RoundingMode::HalfTowardsZero | Polovice k nule. |
half_even | \RoundingMode::HalfEven | Polovice k najbližšej párnej číslici — bankárske zaokrúhľovanie. |
half_odd | \RoundingMode::HalfOdd | Polovice k najbližšej nepárnej číslici. |
towards_zero | \RoundingMode::TowardsZero | Vždy oreže smerom k nule. |
away_from_zero | \RoundingMode::AwayFromZero | Vždy zaokrúhli od nuly. |
positive_infinity | \RoundingMode::PositiveInfinity | Vždy nahor (strop). |
negative_infinity | \RoundingMode::NegativeInfinity | Vždy nadol (podlaha). |
Presne pri akejkoľvek veľkosti
Škála zobrazenia väčšia ako uložená sa vykreslí presne — prepočet beží v money-for-laravel na celočíselných reťazcoch s ľubovoľnou presnosťou, takže ani PHP_INT_MAX sa nikdy nezmení na float:
config(['credits.scale' => 0]);
$user->displayCredits(PHP_INT_MAX, scale: 6); // "9223372036854775807.000000"Škála zobrazenia je obmedzená na 36 desatinných miest; zápornú škálu balík berie ako nulu.
Zobrazenie súčtov
Samostatné metódy na zobrazenie súčtov neexistujú — poskladajte ich zo súčtov:
$user->displayCredits($user->totalCreditsBalance()); // formatted grand total
$user->displayCredits($user->creditsBalanceForBuckets(['promotional', 'purchased']));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 kryptomienOdoslaní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.