PHP基础类型之浮点型

柔光的暖阳◎ 2022-06-10 06:40 321阅读 0赞

浮点型数(也叫浮点数 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中的简单实用。

  1. $x = 1.23456789;
  2. echo $x;
  3. echo "<br>";
  4. $x2 = 1.2345678;
  5. echo $x2;
  6. echo "<br>";
  7. $x3 = 2.5E-2;
  8. echo $x3;
  9. echo "<br>";
  10. $exp = 0.000001;
  11. if(abs($x -$x2) < $exp)
  12. {
  13. echo "true";
  14. }

以下是程序的运行结果。

  1. 1.23456789
  2. 1.2345678
  3. 0.025
  4. true

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

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

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

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

  1. $x= 0.23456;
  2. var_dump(ceil($x));
  3. echo "<br>";
  4. $x= 1.23456;
  5. var_dump(ceil($x));
  6. echo "<br>";
  7. $x= 1.83456;
  8. var_dump(ceil($x));
  9. echo "<br>";

以下是运行结果

  1. float(1)
  2. float(2)
  3. float(2)

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

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

  1. echo "round(3.4):".round(3.4);
  2. echo "<br>";
  3. echo "round(3.5):".round(3.5);
  4. echo "<br>";
  5. echo "round(3.6):".round(3.6);
  6. echo "<br>";
  7. echo "round(3.6, 0):".round(3.6, 0);
  8. echo "<br>";
  9. echo "round(1.95583, 2):".round(1.95583, 2);
  10. echo "<br>";
  11. echo "round(1241757, -3):".round(1241757, -3);
  12. echo "<br>";
  13. echo "round(5.045, 2):".round(5.045, 2);
  14. echo "<br>";
  15. echo "round(5.055, 2):".round(5.055, 2);
  16. echo "<br>";

运行结果:

  1. round(3.4):3
  2. round(3.5):4
  3. round(3.6):4
  4. round(3.6, 0):4
  5. round(1.95583, 2):1.96
  6. round(1241757, -3):1242000
  7. round(5.045, 2):5.05
  8. round(5.055, 2):5.06

发表评论

表情:
评论列表 (有 0 条评论,321人围观)

还没有评论,来说两句吧...

相关阅读

    相关 类型

    浮点类型 1.概述 \--浮点类型用于表示小数的数据类型。 \--浮点数的原理:也就是二进制科学计数法。 \--Java的浮点类型有float和do