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; }