Когда число с плавающей запятой нужно усечь до определенной цифры после плавающей точки, оказывается, что это сделать непросто. Например, если необходимо выполнить усечение до второй цифры после точки, числа должны быть
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 ) );
}