Math
|
|
|
|
<?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(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;
}
?>
|
|
|
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
|
|
|
|