Проблема в том, что PHP не распознает ,
в 1,99
как десятичный разделитель.Тип float
определяется как имеющий следующее формальное определение :
LNUM [0-9]+
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})
Это означает, что он будет принимать только .
в качестве десятичного разделителя.Фактически это та же самая причина, по которой number_format
выдает предупреждение о недопустимом типе данных, поскольку он не может преобразовать 1,99
в float
внутри.
Следующее должно работать:
$float = "1,99";
echo "<p>$float<br>";
$val = number_format(str_replace(',', '.', $float), 2,'.', ',');
echo "$float</p>";