En php esto es lo que hice (inspirado en esta publicación). Quizás no sea el más elegante pero ... Hice una función para imprimir números como cadenas. Quería poder tener flexibilidad, así que tengo un par de parámetros.
PHP:
function print_num($num,$numdec,$atleast = false,$max_dec = -1)
{
$ret_norm = false;
if (!$atleast)
$ret_norm = true;
else //atleast = true
{
//Want at least $numdec decimals
//Do we have two or fewer and want to return two or fewer?
if ($num == ((int)($num*100)/100) & $numdec <= 2)
$ret_norm = true;
else
{
//See if we have enough dec. already
$just_dec = substr((string)$num,strpos((string)$num,".") + 1);
if ($numdec >= strlen($just_dec))
$ret_norm = true;
else
{
//More decimals than at least value - make sure we don't go over max if set
if ($max_dec >= 0 && strlen($just_dec) > $max_dec)
{
//Confine to max_dec length
$ret_norm = true;
$numdec = $max_dec; //Set for sprintf below
$num = number_format($num,$max_dec); //Round the value so doesn't just chop off
}
else if ($max_dec >= 0)
$ret_norm = false;
} //else
} //else
} //else atlest
if ($ret_norm)
return sprintf("%0.".$numdec."f",$num);
else
return sprintf("%s",$num); //print as is
} //print_num
Y para llamar a la función (tener al menos dos decimales pero Max 4:
print_num($mynum,2,true,4);
Si el número es 34.1, se obtiene 34.10
Si el número es 34.12345 obtienes 34.1235
etc.
El tema es sobre el formateo. No redondeando. Además, 'toFixed' tiene la reputación de ser muy inconsistente en cuanto a redondear hacia arriba o hacia abajo. – Kafoso
La diferencia entre el formateo y el redondeo parece semántica cuando la pregunta es sobre el valor del formato a un cierto número de decimales. Si tiene algunos detalles sobre la incoherencia de 'toFixed' que podría ser una adición útil. – SimplGy