从php.net上找到一个比较合理的方案:使用stdround函数代替php的round函数
<?php  function stdround($num, $d=0)
  {
   return round($num + 0.0001 / pow(10, $d), $d);
  } 
    
echo "round(1.005,2)=".round(1.005,2)."\n";
echo "round(1.015,2)=".round(1.015,2)."\n";
echo "round(1.025,2)=".round(1.025,2)."\n";
echo "round(1.035,2)=".round(1.035,2)."\n";
echo "round(1.045,2)=".round(1.045,2)."\n";
echo "round(1.055,2)=".round(1.055,2)."\n";
echo "round(1.065,2)=".round(1.065,2)."\n";
echo "round(1.075,2)=".round(1.075,2)."\n";
echo "round(1.085,2)=".round(1.085,2)."\n";
echo "round(1.095,2)=".round(1.095,2)."\n";echo "stdround(1.005,2)=".stdround(1.005,2)."\n";
echo "stdround(1.015,2)=".stdround(1.015,2)."\n";
echo "stdround(1.025,2)=".stdround(1.025,2)."\n";
echo "stdround(1.035,2)=".stdround(1.035,2)."\n";
echo "stdround(1.045,2)=".stdround(1.045,2)."\n";
echo "stdround(1.055,2)=".stdround(1.055,2)."\n";
echo "stdround(1.065,2)=".stdround(1.065,2)."\n";
echo "stdround(1.075,2)=".stdround(1.075,2)."\n";
echo "stdround(1.085,2)=".stdround(1.085,2)."\n";
echo "stdround(1.095,2)=".stdround(1.095,2)."\n";$m=0.000000000000001;
echo "\n";
echo "round(1.005+{$m},2)=".round(1.005+$m,2)."\n";
echo "round(1.015+{$m},2)=".round(1.015+$m,2)."\n";
echo "round(1.025+{$m},2)=".round(1.025+$m,2)."\n";
echo "round(1.035+{$m},2)=".round(1.035+$m,2)."\n";
echo "round(1.045+{$m},2)=".round(1.045+$m,2)."\n";
echo "round(1.055+{$m},2)=".round(1.055+$m,2)."\n";
echo "round(1.065+{$m},2)=".round(1.065+$m,2)."\n";
echo "round(1.075+{$m},2)=".round(1.075+$m,2)."\n";
echo "round(1.085+{$m},2)=".round(1.085+$m,2)."\n";
echo "round(1.095+{$m},2)=".round(1.095+$m,2)."\n";
echo "round(1.005,2)=".round(1.005,2)."\n";
echo "round(1.015,2)=".round(1.015,2)."\n";
echo "round(1.025,2)=".round(1.025,2)."\n";
echo "round(1.035,2)=".round(1.035,2)."\n";
echo "round(1.045,2)=".round(1.045,2)."\n";
echo "round(1.055,2)=".round(1.055,2)."\n";
echo "round(1.065,2)=".round(1.065,2)."\n";
echo "round(1.075,2)=".round(1.075,2)."\n";
echo "round(1.085,2)=".round(1.085,2)."\n";
echo "round(1.095,2)=".round(1.095,2)."\n";
?>返回结果:
round(1.005,2)=1
round(1.015,2)=1.01
round(1.025,2)=1.02
round(1.035,2)=1.03
round(1.045,2)=1.05
round(1.055,2)=1.06
round(1.065,2)=1.07
round(1.075,2)=1.08
round(1.085,2)=1.09
round(1.095,2)=1.1
stdround(1.005,2)=1.01
stdround(1.015,2)=1.02
stdround(1.025,2)=1.03
stdround(1.035,2)=1.04
stdround(1.045,2)=1.05
stdround(1.055,2)=1.06
stdround(1.065,2)=1.07
stdround(1.075,2)=1.08
stdround(1.085,2)=1.09
stdround(1.095,2)=1.1round(1.005+1E-015,2)=1.01
round(1.015+1E-015,2)=1.02
round(1.025+1E-015,2)=1.03
round(1.035+1E-015,2)=1.04
round(1.045+1E-015,2)=1.05
round(1.055+1E-015,2)=1.06
round(1.065+1E-015,2)=1.07
round(1.075+1E-015,2)=1.08
round(1.085+1E-015,2)=1.09
round(1.095+1E-015,2)=1.1
round(1.005,2)=1
round(1.015,2)=1.01
round(1.025,2)=1.02
round(1.035,2)=1.03
round(1.045,2)=1.05
round(1.055,2)=1.06
round(1.065,2)=1.07
round(1.075,2)=1.08
round(1.085,2)=1.09
round(1.095,2)=1.1