我已经说过0.00001004
或0.00001
我正在尝试选择以及如何修剪小数位并将其转为两者,以便两次都返回0.00001
。
我不希望它无论如何都要对数字进行舍入。
我已经尝试过了,但它没有给我预期的结果。
function decimalFix($number, $decimals) {
return floatval(bcdiv($number, 1, $decimals));
}
echo decimalFix(0.00001, 5); // returns "0"
有谁知道我能做什么?我不能涉及任何舍入,我需要它将它作为浮点而不是字符串返回。
答案 0 :(得分:1)
我不知道为什么你会如此致力于失去精确度,但是这里有一些数学能够以你希望的方式犯这个错误。
$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"
答案 1 :(得分:0)
在floor()
的PHP文档的first comment中有一个完全的函数。我会把它复制在这里以防它从那里消失,但是积分可以转到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);
}
用法是一样的。