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 协议》,转载必须注明作者和本文链接
xylp
讨论数量: 24

round() 函数本身不就是对浮点数进行四舍五入嘛,为何还要递归一下计算呢?

1个月前 评论
小李世界 1个月前
xylp (楼主) 1周前

bcadd('3.222514584785', 0, 4)

1个月前 评论
Tacks 1个月前
Darwin 1个月前
xylp (楼主) 1周前

sprintf("%0.4f",3.222554584785) 不也是可以四舍五入吗?如果要float的格式,用 floatval($num) 转换一下不也可以么

1个月前 评论
xylp (楼主) 1周前

同问,这种咋还用到递归

1个月前 评论
xylp (楼主) 1周前

重复造轮子?

1个月前 评论
xylp (楼主) 1周前

同问楼上的问题,round函数本身就是用于浮点数四舍五入的

1个月前 评论
xylp (楼主) 1周前

round($number, 2)

1个月前 评论
xylp (楼主) 1周前

没有必要

3周前 评论
xylp (楼主) 1周前

trim(round($number, 2), '0')

1周前 评论
xylp (楼主) 1周前

rtrim(round(0.001111, 4), '0')

1周前 评论
xylp (楼主) 1周前
di-gua (作者) 1周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!