php四舍五入?为什么php用小数点相减不对呢
大家好,如果您还对php四舍五入不太了解,没有关系,今天就由本站为大家分享php四舍五入的知识,包括为什么php用小数点相减不对呢的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
php round怎么用啊!
1、数据库中的round()
Round函数返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。除数值外,也可对日期进行舍入运算。
2、Excel中的round()
round函数是EXCEL中的一个基本函数,作用按指定的位数对数值进行四舍五入,语法是ROUND(number, num_digits)。
3、PHP中的round()
round(x,prec),x:可选,规定要舍入的数字。prec:可选,规定小数点后的位数。
函数将返回将x根据指定精度prec(十进制小数点后数字的数目)进行四舍五入的结果。prec也可以是负数或零(默认值)。
php除法函数是什么
php除法函数有3个,分别是:1、round函数,用于对浮点数进行四舍五入;2、ceil函数用于向上舍入为最接近的整数;3、floor函数,用于向下舍入为最接近的整数。
推荐:《PHP视频教程》
php中除法取整的方法(round,ceil,floor)
PHP中遇到需要将除法所得结果取整的情况时,就需要用到以下方法:
1. round:四舍五入
round()函数对浮点数进行四舍五入。
语法:round(x, prec)
参数
x可选。规定要舍入的数字。
prec可选。规定小数点后的位数。
说明:返回将 x根据指定精度 prec(十进制小数点后数字的数目)进行四舍五入的结果。prec也可以是负数或零(默认值)。
提示:PHP默认不能正确处理类似"12,300.2"的字符串。
例:
<?php
echo(round(0.60));
echo(round(0.50));
echo(round(0.49));
echo(round(-4.40));
echo(round(-4.60));
?>输出:
1
1
0
-4
-52. ceil:向上取整
ceil()函数向上舍入为最接近的整数。
语法:ceil(x)
参数
x必须。规定要舍入的数字。
说明:返回不小于 x的下一个整数,x如果有小数部分则进一位。ceil()返回的类型仍然是 float,因为 float值的范围通常比 integer要大。
例:
<?php
echo(ceil(0.60);
echo(ceil(0.40);
echo(ceil(5);
echo(ceil(5.1);
echo(ceil(-5.1);
echo(ceil(-5.9));
?>输出:
1
1
5
6
-5
-53. floor:向下取整
floor()函数向下舍入为最接近的整数。
语法:floor(x)
参数
x必须。规定要舍入的数字。
说明:返回不大于 x的下一个整数,将 x的小数部分舍去取整。floor()返回的类型仍然是 float,因为 float值的范围通常比 integer要大。
例:
<?php
echo(floor(0.60));
echo(floor(0.40));
echo(floor(5));
echo(floor(5.1));
echo(floor(-5.1));
echo(floor(-5.9))
?>输出:
0
0
5
5
-6
-6
为什么php用小数点相减不对呢
一则浮点数计算例子如下:
代码如下:
$a= 0.2+0.7;
$b= 0.9;
var_dump($a==$b);
打印出的结果是:bool(false)。也就是说在这里 0.2+0.7的计算结果与 0.9并不相等,这显然是有违我们的常识的。
对此问题,PHP官方手册曾又说明:显然简单的十进制分数如 0.2不能在不丢失一点点精度的情况下转换为内部二进制的格式。这和一个事实有关,那就是不可能精确的用有限位数表达某些十进制分数。例如,十进制的 1/3变成了 0.3333333...。
我们将上面的变量用双精度格式打印出来:
代码如下:
$a= 0.2+0.7;
$b= 0.9;
printf("%0.20f",$a);
echo'<br/>';
printf("%0.20f",$b);
输出结果如下:
代码如下:
0.89999999999999991118
0.90000000000000002220
显然在这里,实际上作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。需要说明的是,这不是PHP的问题,而是计算机内部处理浮点数的问题!在 C、JAVA等语言中也会遇到同样的问题。
所以要比较两个浮点数,需要将其控制在我们需要的精度范围内再行比较,因此使用 bcadd()函数来对浮点数想加并进行精度转换(为字符串):
代码如下:
var_dump(bcadd(0.2,0.7,1)== 0.9);//输出:bool(true)
浮点数取整
在《PHP取整函数 ceil与 floor》一文中,曾有例子:
代码如下:
<?php
echo ceil(2.1/0.7);//输出:4
?>
经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的:
代码如下:
<?php
printf("%0.20f",(2.1/0.7));//输出:3.00000000000000044409
?>
经过上面对浮点数计算的探讨,知道这是浮点数计算结果不完全精确造成的,因此使用 round()函数处理一下即可:
代码如下:
<?php
echo ceil( round((2.1/0.7),1));
?>
虽然 round()函数是按照指定的精度进行四舍五入,但保留小数点后一位,对我们的取整结果是没影响的。
关于本次php四舍五入和为什么php用小数点相减不对呢的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。