Files
trafficpumper/app/Serp/Operations/Money.php
T
2026-08-29 15:53:53 +03:00

32 lines
977 B
PHP

<?php
namespace App\Serp\Operations;
use InvalidArgumentException;
final class Money
{
public static function micros(string|int|float|null $value): int
{
if ($value === null) {
return 0;
}$s = is_float($value) ? number_format($value, 6, '.', '') : (string) $value;
if (! preg_match('/^-?\d+(?:\.\d{1,6})?$/', $s)) {
throw new InvalidArgumentException('Invalid money value.');
}$negative = str_starts_with($s, '-');
$s = ltrim($s, '-');
[$whole,$fraction] = array_pad(explode('.', $s, 2), 2, '');
$result = ((int) $whole * 1000000) + (int) str_pad($fraction, 6, '0');
return $negative ? -$result : $result;
}
public static function decimal(int $micros): string
{
$negative = $micros < 0;
$micros = abs($micros);
return ($negative ? '-' : '').intdiv($micros, 1000000).'.'.str_pad((string) ($micros % 1000000), 6, '0', STR_PAD_LEFT);
}
}