先来看一个例子
$a = 4.5449;
$b = 4.5500;
$c = 4.5501;
$d = 4.5549;
$e = 4.5550;
$f = 4.5551;
//保留1位小数对比:
echo round($a,1); // 4.5
echo sprintf('%.1f',$a); // 4.5
echo round($b,1); // 4.6
echo sprintf('%.1f',$b); // 4.5
echo round($c,1); // 4.6
echo sprintf('%.1f',$c); // 4.6
echo round($d,1); // 4.6
echo sprintf('%.1f',$d); // 4.6
echo round($e,1); // 4.6
echo sprintf('%.1f',$e); // 4.6
echo round($f,1); // 4.6
echo sprintf('%.1f',$f); // 4.6
//保留2位小数对比:
echo round($a,2); // 4.54
echo sprintf('%.2f',$a); // 4.54
echo round($b,2); // 4.55
echo sprintf('%.2f',$b); // 4.55
echo round($c,2); // 4.55
echo sprintf('%.2f',$c); // 4.55
echo round($d,2); // 4.55
echo sprintf('%.2f',$d); // 4.55
echo round($e,2); // 4.56
echo sprintf('%.2f',$e); // 4.55
echo round($f,2); // 4.56
echo sprintf('%.2f',$f); // 4.56
从上面的例子可以看出来,round函数是只看保留小数位数的后面一位是4还是5,是4则舍去,是5则进1,而sprintf函数则不然,sprintf函数是看保留小数位数的后面所有位,只有超过5才会进1,注意是超过
在保留1位小数时候,如上例 $b和$c:
echo round($b,1); ? ? ? ?// 4.6 echo sprintf('%.1f',$c); // 4.5 ?
echo round($b,1); ? ? ? ?// 4.6 echo sprintf('%.1f',$c); // 4.6 ?
在保留2位小数时候,如上例 $e和$f:
echo round($e,2); ? ? ? ?// 4.56 echo sprintf('%.2f',$f); // 4.55 ?
echo round($e,2); ? ? ? ?// 4.56 echo sprintf('%.2f',$f); // 4.56 ?
所以在使用过程中一定要注意这个问题,标准的四舍五入函数就是round,对于金额等其他必须两位小数的,不够补零的有可能会用到sprintf函数。
|