在PHP编程中,处理小数位数常常是一个必备的操作。其中,四舍五入是最常见和常用的方式之一。本文将详细介绍PHP小数位截取规则及四舍五入实现方法,希望能为大家带来帮助。
一、PHP小数位数
在PHP中,写入一个小数(或者说浮点数)通常有2~3种写法:例如,数值为“25.25”,可以写成25.25或者25.25或者2.525E+1。
PHP小数默认精度为14位,而非我们平时所说的2位或者3位。这就决定了在PHP中处理领域特殊的业务需求,可能会涉及到小数位数的截取、四舍五入等操作。
二、PHP小数位截取规则详解
通常情况下,我们在PHP应用实践中处理小数时可能会涉及以下3种常见的小数位截取规则:
1、保留小数位数
保留小数位数指保留小数点后的位数,如果超过指定位数自动四舍五入。
下面是PHP代码实现:
$num = 12.987654321;
$round = round($num,2);//四舍五入,保留2位小数
echo $round;//12.99
本代码中,round()函数是一个用来进行四舍五入的函数。第一个参数表示传入一个小数,第二个参数指定需要保留的小数位数。例如上面代码中的$num = 12.987654321,使用round()函数进行四舍五入并保留两位小数,结果为12.99。
2、保留小数位数并截取
保留小数位数并截取指保留小数点后的位数,如果超过指定位数直接截取。
下面是PHP代码实现:
$num = 12.987654321;
$number = sprintf("%.2f", $num);//保留两位小数且截取
echo $number;//12.98
本代码中,sprintf()函数是一个格式化输出函数,第一个参数是格式化输出字符串,第二个参数是要格式化的数据。例如上面代码中的$num = 12.987654321,使用sprintf()函数进行格式化输出,保留两位小数且截取,结果为12.98。
3、JS实现数字精度计算
JS 在进行浮点数计算的时候会出现一些精度误差,这个误差可能会影响到我们的业务逻辑。我们可以借助 BigNumber.js 来避免这种误差。
let v1 = 0.1;
let v2 = 0.2;
let v3 = 3.2;
let sum = v1 + v2 + v3;
console.log(sum); // 3.5
通过上面代码可以发现,JS 的浮点数计算出现了误差。那么我们如何解决这个问题呢?使用 BigNumber.js 对它们进行计算即可避免这个问题:
import BigNumber from 'bignumber.js';
let v1 = new BigNumber(0.1);
let v2 = new BigNumber(0.2);
let v3 = new BigNumber(3.2);
let sum = v1.plus(v2).plus(v3);
console.log(sum.toString()); // 3.5
通过上面代码可以发现,使用 BigNumber.js 对浮点数进行计算时可以避免精度误差。
三、PHP四舍五入实现方法大全
除了上面提到的三种小数位截取规则外,还有其他的一些PHP四舍五入实现方法,下面一一介绍:
1、PHP函数法进行四舍五入
在PHP中,支持使用round()函数来进行四舍五入操作。round()函数用于四舍五入一个数。如果小数位的第一位为五或更大并且小数点后还有数,则该数将被向最近的偶数舍入。否则,该数决然向下舍入,例如:
echo round(2.2).'br/'; //2
echo round(2.5).'br/'; //3
echo round(2.6).'br/'; //3
2、PHP自定义函数法进行四舍五入
PHP中,可以使用sprintf()函数来格式化输出字符串,从而实现自定义函数来进行四舍五入操作:
//自定义保留$num小数位函数
function roundUp($number, $num)
{
$number = sprintf("%.".$num."f", $number);
return $number;
}
echo roundUp(2.125, 2); // 2.13
3、PHP截取小数位数法进行四舍五入
可以使用substr()函数截取小数点后指定的位数,然后再根据后一位进行四舍五入的操作。
function round_up($number, $precision)
{
$integer_part = floor($number);
$float_part = substr($number, strlen($integer_part) + 1 ,$precision);
if (intval($float_part[0]) >= 5) {
if ($precision == 0) {
$integer_part += 1;
} else {
$float_part = "0." . $float_part;
$integer_part += intval(substr(round($float_part, $precision), 2));
}
}
return $integer_part;
}
echo round_up(2.593416, 2); //2.59
4、PHP正则表达式匹配判断法进行四舍五入
正则表达式匹配判断法可以将小数点后面的数提取出来,根据小数点后一位的数判断是否需要四舍五入:
function round_Up($number, $precision)
{
$pattern = "/\d+\.\d{{$precision + 1},}/";
if (preg_match($pattern, $number, $matches)) {
if (substr($matches[0], $precision + 1, 1) >= 5) {
return ceil($number * pow(10, $precision)) / pow(10, $precision);
}
}
return round($number, $precision);
}
echo round_Up(2.138, 2); //2.14
四、总结
上述就是本文对PHP小数位截取规则及四舍五入实现方法的详细介绍,希望可以对大家的日常编码有所帮助。需要注意,不同的业务需求可能需要不同的小数位截取规则,开发者需要具体情况具体分析,以适应业务需求。