我让我们说0.00001004
或0.00001
我试图选择和小数位数如何修剪和转动这两个所以它返回0.00001
两次。
无论如何,我不希望它绕过这个数字。
我试过这个,但它没有给我想要的结果。
function decimalFix($number, $decimals) {
return floatval(bcdiv($number, 1, $decimals));
}
echo decimalFix(0.00001, 5); // returns "0"
有谁知道我能做什么?我不能涉及任何舍入,我需要它将它作为浮点而不是字符串返回。
我不知道你为什么如此致力于失去精确度,但是这里有一些数学能够以你想要的方式犯这个特殊的错误。
$derp = 0.000016;
function derp_round($derp, $len) {
$mul = pow(10, $len);
return floor($derp * $mul)/$mul;
}
var_dump(
$derp,
number_format($derp, 5),
sprintf("%.5f", $derp),
sprintf("%.5f", round($derp, 5, PHP_ROUND_HALF_DOWN)),
sprintf("%.5f", derp_round($derp, 5))
);
输出:
float(1.6E-5)
string(7) "0.00002"
string(7) "0.00002"
string(7) "0.00002"
string(7) "0.00001"
有一个函数可以在first comment的PHP文档中的floor()
中完成此操作。我会在这里复制它,以防它从那里消失,但是积分转到seppili_:
function floordec($zahl,$decimals=2){
return floor($zahl*pow(10,$decimals))/pow(10,$decimals);
}
使用它像:
$number = 0.00001004;
$rounded = floordec($number, 5);
var_dump($rounded); // float(0.00001)
编辑:Leon Grdic在该页面上发表评论further down警告浮动精度并提供此更新版本:
function floordec($value,$decimals=2){
return floor($value*pow(10,$decimals)+0.5)/pow(10,$decimals);
}
用法是一样的。