On Mon, Apr 8, 2019 at 9:51 AM David Rodrigues <david.pro...@gmail.com>
wrote:

> Currently number_format() could accept one, two or four args. If three args
> is passed then you will receive "wrong parameter count for number_format()"
> error (ArgumentCountError).
>
> It have four parameters: float $number, int $decimals, string $dec_point
> and string $thousands_sep.
>
> * If one arg is passed, then $decimals = 0 and $thousands_sep = ",".
> * If two args is passed, then $dec_point = "." and $thousands_sep = ",".
> * If four args is passed, then it will respect given args;
>
> There some cases where we just don't need a $thousands_sep, so I suggest to
> accept three args with $thousands_sep = '' (and not a comma).
>
> It will works fine for the doc (
> https://www.php.net/manual/en/function.number-format.php) example:
>
> // english notation without thousands separator
> $english_format_number = number_format($number, 2, '.', ''); // Currently
> $english_format_number = number_format($number, 2, '.'); // After
> // 1234.57 (same result)
>
> The fourth parameter will change "the behavior" if compared with the
> another original cases, but it will happen because there is no reason to
> use three args if you pretends to keep the comma as fourth arg once that
> normally you will use or "." or "," as decimal separator.
>
> * If you pretends to use dot + comma, just use two args;
> * If you pretends to use comma + dot, just use four args;
> * If you pretends to use dot + nothing, use three args;
> * If you pretends to use comma + nothing, use three args


This seems very confusing. Despite the somewhat convoluted description in
the docs, the way the function currently works is with the

   number_format(float $number, int $decimals = 0, string $dec_point = ".",
string $thousands_sep = ",")

signature and all defaults behaving as usual, plus an explicit check to
prohibit three arguments.

I think it would make sense to allow three arguments to make this function
behave more normally, but in this case "," should stay the default of the
thousands separator. Changing a default value based on the number of
arguments passed would be a major WTF moment, imho. I don't think think the
confusion is worth saving an "" argument.

Regards,
Nikita

Reply via email to