Odpowiem w osobnym poście bo w komentarzu się nie zmieści.
Number format działa jak należy -> popatrz na przykład kodu
<?php
$numbers = [7, 7.1, 7.14, 7.1463];
foreach ($numbers as $number) {
echo 'Jako string ' . number_format($number, 2, '.', '');
echo ' => cast do float: ' . (float) number_format($number, 2, '.', '');
echo PHP_EOL;
}
Rezultat:
www-data@d989837b5332:~/html$ php test.php
Jako string 7.00 => cast do float: 7
Jako string 7.10 => cast do float: 7.1
Jako string 7.14 => cast do float: 7.14
Jako string 7.15 => cast do float: 7.15
Jak dla mnie wszytko jest ok.Musisz rozróżniać float od stringa i tyle. $a = 7.10 i $a = '7.10' to dwie różne wartości.
A żeby lepiej zrozumieć temat to proponuję zrobić mały eksperyment i odpalić te dwa skrypty:
<?php
echo calc('7,00') . PHP_EOL;
function calc(float $x): float
{
return number_format($x, '2', '.', '');
}
i potem ten:
<?php
declare(strict_types=1);
echo calc('7,00') . PHP_EOL;
function calc(float $x): float
{
return number_format($x, '2', '.', '');
}
Wtedy powinno ci sie rozjaśnić.