Если вы хотите решение, которое принимает минимальное и максимальное количество знаков после запятой, это должно работать:
/**
* Displays up to 4 decimal places, with a minimum of 2 decimal places, trimming unnecessary zeroes
*
* @param mixed $number
* @param int $minimumDecimals
* @param int $maximumDecimals
* @return string
*/
function rate_format($number, int $minimumDecimals = 2, int $maximumDecimals = 4): string
{
$formatted = number_format($number, $maximumDecimals, '.', ',');
$minimumLength = strpos($formatted, '.') + $minimumDecimals + 1;
$extra = rtrim(substr($formatted, $minimumLength), "0");
return substr($formatted, 0, $minimumLength) . $extra;
}
// rate_format("1.2500") returns "1.25"
// rate_format("1.2525") returns "1.2525"
// rate_format("1.25256") returns "1.2526"
// rate_format("1") returns "1.00"
Это жестко запрограммированный язык для использования в США, но его легко настроить для других языков.