PHP 保留小数点后有效数字(四舍五入)
/**
* 四舍五入保留有效数字
* $val 需要保留的数值 必填
* $num 需要保留的位数 必填
* $s 开始位置 不需要填
* $d 结束位置 不需要填
*/
function keepValidNumbers($val, $num, $s = 1, $d = 1) {
$result = round($val, $s);
if ($result == 0 && $num > $d) {
return keepValidNumbers($val, $num, ++$s, $d);
} else if($num > $d) {
return keepValidNumbers($val, $num, ++$s, ++$d);
} else {
return $result;
}
}
解决的问题是:
round()函数是保留小数点后N位,我的需求是保留小数点后N位有效数字,如0.001111111,round()的结果为0.0011,我需要的结果是0.001111
有效数字的含义:从该数的第一个非零数字起,直到末尾数字止的数字称为有效数字,如0.618的有效数字有三个,分别是6,1,8。
本作品采用《CC 协议》,转载必须注明作者和本文链接
round()
函数本身不就是对浮点数进行四舍五入嘛,为何还要递归一下计算呢?bcadd('3.222514584785', 0, 4)
sprintf("%0.4f",3.222554584785) 不也是可以四舍五入吗?如果要float的格式,用 floatval($num) 转换一下不也可以么
同问,这种咋还用到递归
重复造轮子?
同问楼上的问题,round函数本身就是用于浮点数四舍五入的
round($number, 2)
没有必要
trim(round($number, 2), '0')
rtrim(round(0.001111, 4), '0')
楼主是对的,
楼主的意思是 保留小数点后(除 0 意外)有效位数
round 是保留小数点后有效位数
如果按楼主意思, 数据库应该怎么设计? 小数点位数不确定