php浮点型(小数类型)

php浮点型教程

php 中的浮点类型是用于存放小数的。php 浮点类型提供了两种精度的浮点数,即单精度(float)和双精度(double)。

php浮点型精度

浮点数的字长和平台相关,尽管通常最大值是 1.8e308 并具有 14 位十进制数字的精度(64 位 IEEE 格式)。

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

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

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

案例

浮点型

php 浮点型可以使用科学计数法的形式表示

<?php echo "嗨客网(www.haicoder.net)<br>"; $float1 = 1.234; $float2 = 1.2e3; $float3 = 1.2e-3; echo "float1 =", $float1, ", float2 =", $float2, ", float3 =", $float3, "<br>";

程序运行后,控制台输出如下:

21_PHP浮点类型.png

我们使用了普通的浮点型和科学计算法的形式,分别定义了两个浮点类型的 变量

浮点型比较

php 浮点型比较大小,不可以直接使用 == 比较

<?php echo "嗨客网(www.haicoder.net)<br>"; $float1 = 1.23456789; $float2 = 1.23456780; $epsilon = 0.00001; if(abs($float1-$float2) < $epsilon) { echo "Equals<br>"; }else{ echo "Not Equals<br>"; }

程序运行后,控制台输出如下:

22_PHP浮点类型.png

我们要比较两个浮点类型时,不可以直接使用等于进行比较,而是要将两个浮点型变量进行相减,看它们的误差是否在可接受的范围内。

php浮点型总结

php 中的浮点类型是用于存放小数的。php 浮点类型提供了两种精度的浮点数,即单精度(float)和双精度(double)。