php 中的浮点类型是用于存放小数的。php 浮点类型提供了两种精度的浮点数,即单精度(float)和双精度(double)。
浮点数的字长和平台相关,尽管通常最大值是 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>";
程序运行后,控制台输出如下:
我们使用了普通的浮点型和科学计算法的形式,分别定义了两个浮点类型的 变量。
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>";
}
程序运行后,控制台输出如下:
我们要比较两个浮点类型时,不可以直接使用等于进行比较,而是要将两个浮点型变量进行相减,看它们的误差是否在可接受的范围内。
php 中的浮点类型是用于存放小数的。php 浮点类型提供了两种精度的浮点数,即单精度(float)和双精度(double)。