当一个 float 需要截断为浮点后的某个数字时,事实证明这并不容易做到。例如,如果必须截断到点后的第二位数字,则数字应为
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 ) );
}
最佳答案
floor
会按照你的要求做。
floor(45.8976 * 100) / 100;
您不会找到更直接的函数来实现此目的,因为这是一种奇怪的问题。通常你会在数学上正确舍入。出于好奇 - 你需要这个做什么?
关于php - 使用 PHP 截断 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4668628/