В php это то, что я сделал (вдохновленный этим постом). Возможно, не самый элегантный, но ... Я сделал функцию для печати чисел в виде строк. Я хотел быть гибким, поэтому у меня есть пара параметров.
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
И для вызова функции (иметь не менее двух десятичных знаков, но не более 4:
print_num($mynum,2,true,4);
Если число 34,1, вы получите 34,10
Если номер 34.12345, вы получите 34.1235
и т.д.