美文网首页
PHP 四舍五入,不四舍五入,四舍六入五成双(银行家舍入)

PHP 四舍五入,不四舍五入,四舍六入五成双(银行家舍入)

作者: Gamer_young | 来源:发表于2017-04-25 15:55 被阅读0次

1、php保留两位小数并且四舍五入,代码如下:

round(123.666666, 2); // 123.67

2、php保留两位小数并且不四舍五入,代码如下:

$offset = strpos($num,  '.');
if ($offset !== false) {
    $num = substr($num, 0, $offset + 3);
}
echo $num;

3、php进一法取整,代码如下:

echo ceil(4.3); // 5 
echo ceil(9.999); // 10 

4、php舍去法,取整数,代码如下:

echo floor(4.3); // 4
echo floor(9.999); // 9 

5、四舍六入无成双(四舍六入五考虑,五后非零就进一,五后为零看奇偶,五前为偶应舍去,五前为奇要进一)

function round2 ($num, $precision) {
    $pow = pow(10, $precision);

    //判断不进1的情况(五后为0且为奇)
    if (substr($num * $pow, strpos($num * $pow, '.') + 1) == 5 && substr($num * $pow, strpos($num * $pow, '.') - 1, 1) % 2 == 0) {
        return floor($num * $pow) / $pow;
    } else {
        return round($num, $precision);
    }
}

function round3($num, $precision) {
    $pow = pow(10, $precision);
    //判断不进1的情况(五后为0且为奇)
    if ( (floor($num * $pow * 10) % 5 == 0) && (bccomp(floor($num * $pow * 10), $num * $pow * 10) == 0) && (floor($num * $pow) % 2 == 0) ) {
        return floor($num * $pow) / $pow;
    } else {
        return round($num, $precision);
    }
 }

要使用 BC 这个函数库,要在编译 PHP 程序时加入 --enable-bcmath 的选项。

  • bcadd: 将二个高精确度数字相加。
  • bccomp: 比较二个高精确度数字。
  • bcdiv: 将二个高精确度数字相除。
  • bcmod: 取得高精确度数字的余数。
  • bcmul: 将二个高精确度数字相乘。
  • bcpow: 求一高精确度数字次方值。
  • bcscale: 配置程序中所有 BC 函数库的默认小数点位数。
  • bcsqrt: 求一高精确度数字的平方根。
  • bcsub: 将二个高精确度数字相减。

如round2有错,请指正!

相关文章

网友评论

      本文标题:PHP 四舍五入,不四舍五入,四舍六入五成双(银行家舍入)

      本文链接:https://www.haomeiwen.com/subject/ledfottx.html