setAttribute(\NumberFormatter::FRACTION_DIGITS, $decimals); return $formatter->format((float) $number); } catch (\Exception $e) { // Fallback below } } return number_format((float) $number, $decimals); } /** * Format a number as currency. */ public static function formatCurrency(string|int|float $amount, string $currency = 'IRR', string $locale = 'fa_IR', int $decimals = 0): string { if (class_exists(\NumberFormatter::class)) { try { $formatter = new \NumberFormatter($locale, \NumberFormatter::CURRENCY); $formatter->setAttribute(\NumberFormatter::FRACTION_DIGITS, $decimals); return $formatter->formatCurrency((float) $amount, $currency); } catch (\Exception $e) { // Fallback below } } return number_format((float) $amount, $decimals) . ' ' . $currency; } /** * Format a number as a percentage. */ public static function formatPercentage(string|int|float $value, int $decimals = 1, string $locale = 'fa_IR'): string { if (class_exists(\NumberFormatter::class)) { try { $formatter = new \NumberFormatter($locale, \NumberFormatter::PERCENT); $formatter->setAttribute(\NumberFormatter::FRACTION_DIGITS, $decimals); return $formatter->format((float) $value / 100); } catch (\Exception $e) { // Fallback below } } return number_format((float) $value, $decimals) . '%'; } }