diff --git a/src/Illuminate/Support/Number.php b/src/Illuminate/Support/Number.php index a63cad5b7c7a..d27a717e74a0 100644 --- a/src/Illuminate/Support/Number.php +++ b/src/Illuminate/Support/Number.php @@ -138,14 +138,19 @@ public static function percentage(int|float $number, int $precision = 0, ?int $m * @param int|float $number * @param string $in * @param string|null $locale + * @param int|null $precision * @return string|false */ - public static function currency(int|float $number, string $in = '', ?string $locale = null) + public static function currency(int|float $number, string $in = '', ?string $locale = null, ?int $precision = null) { static::ensureIntlExtensionIsInstalled(); $formatter = new NumberFormatter($locale ?? static::$locale, NumberFormatter::CURRENCY); + if (! is_null($precision)) { + $formatter->setAttribute(NumberFormatter::FRACTION_DIGITS, $precision); + } + return $formatter->formatCurrency($number, ! empty($in) ? $in : static::$currency); } diff --git a/tests/Support/SupportNumberTest.php b/tests/Support/SupportNumberTest.php index 5f5e44a63b2e..b72143bde68e 100644 --- a/tests/Support/SupportNumberTest.php +++ b/tests/Support/SupportNumberTest.php @@ -151,6 +151,10 @@ public function testToCurrency() $this->assertSame('-$5.00', Number::currency(-5)); $this->assertSame('$5.00', Number::currency(5.00)); $this->assertSame('$5.32', Number::currency(5.325)); + + $this->assertSame('$0', Number::currency(0, precision: 0)); + $this->assertSame('$5', Number::currency(5.00, precision: 0)); + $this->assertSame('$10', Number::currency(10.252, precision: 0)); } #[RequiresPhpExtension('intl')]