Zend - The PHP Company




Math

Add Code


signify(cut number to given significiant digits)  

Type: code fragment
Added by: masterjy
Entered: 13/12/2001
Last modified: 01/12/2001
Rating: - (fewer than 3 votes)
Views: 4390
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


<?php
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(10ceil(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;

}




?>


Usage Example


signify(3.34, 2)       => 3.3
signify(0.003445, 2)   => 0.0034
signify(345.45, 2)     => 340
signify(1, 2)          => 1.0
signify(0.02, 2)       => 0.020
signify(3.45e-4, 2)    => 0.00034
signify(0, 2)          => 0.0


Rate This Script





Search



This Category All Categories