PHP基础类型之浮点型

浮点型数(也叫浮点数 float,双精度数 double 或实数 real)据既可以存储整数,也可以用来存储小数和指数。

-------------------------------------------------------PHP Manual 记载-------------------------------------------------------------------------

浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。

此外,以十进制能够精确表示的有理数如 0.10.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...


所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。如果确实需要更高的精度,应该使用任意精度数学函数或者 gmp 函数

-------------------------------------------------------------------------

要测试浮点数是否相等,要使用一个仅比该数值大一丁点的最小误差值。该值也被称为机器极小值(epsilon)或最小单元取整数,是计算中所能接受的最小的差别值。

这种思想在c++等语言中也是一样的,无法通过(float)a == (float)b 的形式直接比较两个浮点型数值,这时候返回的结果是false,如果不注意这细微点,很可能会给我们的程序

带来不可控的错误。


下面我们通过几个例子来看下float 在php中的简单实用。

$x = 1.23456789;
echo $x;
echo "<br>";

$x2 = 1.2345678;
echo $x2;
echo "<br>";


$x3 = 2.5E-2;
echo $x3;
echo "<br>";


$exp = 0.000001;
if(abs($x -$x2) < $exp)
{
    echo "true";
}

以下是程序的运行结果。

1.23456789
1.2345678
0.025
true


我们在来简单了解以下float相关的几个函数。

1.float floor ( float value)  舍去小数部分,返回整数值(注意:返回结果的类型仍然是float)

$x= 1.23456;
var_dump(floor($x));
echo "<br>";//float(1) 

2.float ceil ( float value)   如果后面有小数部分,不管大小,小数进一位,即整数值+1

$x= 0.23456;
var_dump(ceil($x));
echo "<br>";

$x= 1.23456;
var_dump(ceil($x));
echo "<br>";

$x= 1.83456;
var_dump(ceil($x));
echo "<br>";


以下是运行结果

float(1) 
float(2) 
float(2) 


3.float round ( float val [, int precision])    对浮点数进行四舍五入

这是我们最常见的一种方式。

echo "round(3.4):".round(3.4);
echo "<br>";
echo "round(3.5):".round(3.5);
echo "<br>";
echo "round(3.6):".round(3.6);
echo "<br>";
echo "round(3.6, 0):".round(3.6, 0);
echo "<br>";
echo "round(1.95583, 2):".round(1.95583, 2);
echo "<br>";
echo "round(1241757, -3):".round(1241757, -3);
echo "<br>";
echo "round(5.045, 2):".round(5.045, 2);
echo "<br>";
echo "round(5.055, 2):".round(5.055, 2);
echo "<br>";


运行结果:

round(3.4):3
round(3.5):4
round(3.6):4
round(3.6, 0):4
round(1.95583, 2):1.96
round(1241757, -3):1242000
round(5.045, 2):5.05
round(5.055, 2):5.06




 
   
 
  

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值