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有错,请指正!
网友评论