【发布时间】:2011-06-07 19:20:11
【问题描述】:
当一个浮点数需要在浮点数后截断到某位时,事实证明这并不容易。例如,如果必须截断到该点之后的第二个数字,则数字应该是
45.8976 => 45.89, 0.0185 => 0.01
(点后第二位不按点后第三位四舍五入)。
round()、number_format()、sprintf() 等函数将数字四舍五入并打印出来
45.8976 => 45.90, 0.0185 => 0.02
我遇到了两种解决方案,我想知道它们是否足够好,哪个更好用
1.
function truncNumber( $number, $prec = 2 )
{
return bccomp( $number, 0, 10 ) == 0 ? $number : round( $number - pow( 0.1, bcadd( $prec, 1 ) ) * 5, $prec );
}
2.
function truncNumber($number, $prec = 2 )
{
return sprintf( "%.".$prec."f", floor( $number*pow( 10, $prec ) )/pow( 10, $prec ) );
}
【问题讨论】:
-
嗨。你从哪里得到这个功能的?它们是否适合您?你选择了哪一个?为什么?
标签: php floating-point truncate floating-accuracy