Я думаю, что ключевой проблемой является определение количества необходимых позиций. Вы бы определили 13.01 как 13, потому что первое десятичное число было 0? Поскольку printf и числовой формат требуют, чтобы вы знали, сколько десятичных знаков, я не знаю, что это сработало бы для вас.
Может быть, что-то вроде этого (много функций, но ищет первый 0, а затем возвращает усеченную строку). Да, это интенсивно, но это может быть лучшим способом для вас.
function show_number($number, $max = 8){
if(strpos($number, '.')){
$decimal = strpos($number, '.');
if(strpos($number, '.0')){
return substr($number, 0, $decimal);//returns whole if zero is first
} else {
if(strpos(substr($number, $decimal, $max), '0')){
$zero = strpos(substr($number, $decimal, $max), '0');
return substr($number, 0, $decimal+$zero);//returns number w/0 first zero
} else {
return substr($number, 0, $decimal+$max+1); //returns number with max places
}
}
} else {
return $number; //returns number if no decimals
}
}