1
0
Fork 0
mirror of https://github.com/archtechx/money.git synced 2025-12-12 19:34:02 +00:00

Fixes #11 - Remove trailing zeros from formatted price (#18)

* Remove trailing zeros from formatted price

* Add setting for how to handle trailing decimal zeros

* Write tests

* Fix code style

* Rewrite function description

* Change test name

* Add empty line at end of file

* rename deleteTrailingDecimalZeros to trimTrailingDecimalZeros

* Fix grammar

* Remove unnecessary parameter declarations

* fix test name

* fix comment grammar

* fix docblock grammar

Co-authored-by: Samuel Štancl <samuel@archte.ch>
This commit is contained in:
David Andersson 2022-05-16 13:12:13 +02:00 committed by GitHub
parent 545610efb0
commit 269274586a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 52 additions and 1 deletions

View file

@ -40,6 +40,9 @@ class Currency implements Arrayable, JsonSerializable
/** How many decimals of the currency's values should get rounded. */
protected int $rounding;
/** Should trailing decimal zeros be trimmed. */
protected bool $trimTrailingDecimalZeros;
/** Create a new Currency instance. */
public function __construct(
string $code = null,
@ -52,6 +55,7 @@ class Currency implements Arrayable, JsonSerializable
int $rounding = null,
string $decimalSeparator = null,
string $thousandsSeparator = null,
bool $trimTrailingDecimalZeros = null,
) {
$this->code = $code ?? $this->code ?? '';
$this->name = $name ?? $this->name ?? '';
@ -63,6 +67,7 @@ class Currency implements Arrayable, JsonSerializable
$this->decimalSeparator = $decimalSeparator ?? $this->decimalSeparator ?? '.';
$this->thousandsSeparator = $thousandsSeparator ?? $this->thousandsSeparator ?? ',';
$this->rounding = $rounding ?? $this->rounding ?? $this->mathDecimals;
$this->trimTrailingDecimalZeros = $trimTrailingDecimalZeros ?? $this->trimTrailingDecimalZeros ?? false;
$this->check();
}
@ -133,6 +138,12 @@ class Currency implements Arrayable, JsonSerializable
return $this->rounding;
}
/** Get the currency's setting for trimming trailing decimal zeros. */
public function trimTrailingDecimalZeros(): bool
{
return $this->trimTrailingDecimalZeros;
}
/** Convert the currency to a string (returns the code). */
public function __toString()
{
@ -153,6 +164,7 @@ class Currency implements Arrayable, JsonSerializable
'rounding' => $this->rounding,
'decimalSeparator' => $this->decimalSeparator,
'thousandsSeparator' => $this->thousandsSeparator,
'trimTrailingDecimalZeros' => $this->trimTrailingDecimalZeros,
];
}

View file

@ -23,6 +23,14 @@ class PriceFormatter
$currency->thousandsSeparator(),
);
if ($currency->trimTrailingDecimalZeros()) {
// Remove trailing zeros from the formatted string
$decimal = rtrim($decimal, '0');
// Once there are no more decimal values, remove the decimal separator as well
$decimal = rtrim($decimal, $currency->decimalSeparator());
}
return $currency->prefix() . $decimal . $currency->suffix();
}