PhpSnip.com

User Stats

signify(cut number to given significiant digits)

take for example, you want to have 2 significiant digits, then 3.34 => 3.3 0.003445 => 0.0034 345.45 => 340 1 => 1.0 0.02 => 0.020 3.45e-4 => 0.00034 0 => 0.0

Info

 Download  View Source (print view)
 Rating : 4.7  Views : 525

Source Code ( 47 lines )

this function works with any non-negtive numbers(including numbers in scientific format)



function signify($number, $digits)
{
  $number = (float)$number;
  $digits = (int)$digits;
  if($number)
  {
    $whole_part = pow(10, ceil(log10($number)));
    $ret = $whole_part * round($number/$whole_part, $digits);

   // fix scientific bug
    if($ret < 1)
    {
    $decimal_num = - floor(log10($ret));
    $format = "%1.".($decimal_num + $digits - 1).'f';
    $ret = sprintf("$format", $ret);
   }
  }
  // fix zero bug
  else
  {
    $ret = 0;
  }	


  // deal with display
  $raw_len = strlen($ret);
  
  if(preg_match('/^0.0*/', $ret, $out))
    $raw_len -= strlen($out[0]);
  else
    $raw_len -= preg_match('/./', $ret);

  if($raw_len < $digits)
  {
    if(preg_match('/./', $ret))
	  $ret = $ret.str_repeat('0', ($digits - $raw_len));
	else
	  $ret = $ret.'.'.str_repeat('0', ($digits - $raw_len));
  }	  
  
  return $ret;

}

Search

Subscribe

  Rss Feeds

Sponsors

Advertise