PHP float 关键字
最后修改于 2025 年 4 月 16 日
PHP 的 float
关键字表示浮点数(小数)。浮点数允许存储带有小数部分的数字。它们对于科学计算和精确测量至关重要。
基本定义
float
是带有小数点或指数形式的数字。PHP 浮点数遵循 IEEE 754 浮点运算标准。
浮点数具有有限的精度(约 14 位小数)。它们可以使用科学计数法表示非常大或非常小的数字。
在 PHP 中,float
类型也称为 double
。与某些其他语言不同,PHP 中的 float 和 double 没有区别。
基本浮点数声明
此示例展示了如何在 PHP 中声明和使用基本的浮点数变量。
<?php declare(strict_types=1); $price = 19.99; $temperature = -3.5; $scientific = 1.2e3; // 1200 echo "Price: $price\n"; echo "Temperature: $temperature\n"; echo "Scientific: $scientific\n";
代码声明了三个具有不同表示法的浮点数变量。第一个使用标准十进制表示法。第二个展示了负浮点数。第三个演示了科学计数法(1.2 × 10³)。
浮点数类型转换
此示例演示了如何使用类型转换将其他类型转换为浮点数。
<?php declare(strict_types=1); $intVal = 42; $strVal = "3.14"; $boolVal = true; $float1 = (float) $intVal; $float2 = floatval($strVal); $float3 = (float) $boolVal; echo "Int to float: $float1\n"; echo "String to float: $float2\n"; echo "Bool to float: $float3\n";
代码展示了两种转换为 float 的方法:使用 (float)
或 floatval
。整数直接转换。字符串必须包含有效的浮点数语法。布尔值 true 变为 1.0,false 变为 0.0。
浮点数算术运算
此示例演示了浮点数的算术运算。
<?php declare(strict_types=1); $a = 5.5; $b = 2.2; $sum = $a + $b; $diff = $a - $b; $product = $a * $b; $quotient = $a / $b; $modulus = fmod($a, $b); echo "Sum: $sum\n"; echo "Difference: $diff\n"; echo "Product: $product\n"; echo "Quotient: $quotient\n"; echo "Modulus: $modulus\n";
代码对浮点数执行标准算术运算。请注意,对于模运算,我们使用 fmod
而不是 %。浮点数除法即使是整数也会始终产生浮点数结果。
浮点数精度问题
此示例演示了浮点数常见的精度问题。
<?php declare(strict_types=1); $a = 0.1; $b = 0.2; $sum = $a + $b; echo "Expected: 0.3\n"; echo "Actual: $sum\n"; if (abs($sum - 0.3) < PHP_FLOAT_EPSILON) { echo "The values are considered equal.\n"; }
代码显示 0.1 + 0.2 由于二进制表示不完全等于 0.3。为了安全地比较浮点数,我们检查其差值是否小于 PHP_FLOAT_EPSILON
,这是可表示的最小差值。
浮点数函数
此示例演示了常用的 PHP 浮点数处理函数。
<?php declare(strict_types=1); $num = 3.14159; echo "Floor: " . floor($num) . "\n"; echo "Ceil: " . ceil($num) . "\n"; echo "Round: " . round($num, 2) . "\n"; echo "Is finite: " . (is_finite($num) ? 'Yes' : 'No') . "\n"; echo "Is NAN: " . (is_nan($num) ? 'Yes' : 'No') . "\n";
代码演示了几个与浮点数相关的函数。floor
向下取整,ceil
向上取整,round
四舍五入到指定精度。is_finite
和 is_nan
检查特殊的浮点数值。
函数参数中的浮点数
此示例展示了如何在函数参数中使用浮点数类型提示。
<?php declare(strict_types=1); function calculateArea(float $radius): float { return M_PI * $radius * $radius; } $radius = 5.5; $area = calculateArea($radius); echo "Area of circle with radius $radius: $area\n";
代码定义了一个接受并返回浮点数的函数。当设置 strict_types=1
时,PHP 会强制执行浮点数类型。该函数使用 M_PI
常量计算圆的面积。
使用浮点数进行科学计算
此示例演示了如何使用浮点数进行科学计算。
<?php declare(strict_types=1); function calculateKineticEnergy(float $mass, float $velocity): float { return 0.5 * $mass * $velocity ** 2; } $mass = 2.5; // kg $velocity = 10.2; // m/s $energy = calculateKineticEnergy($mass, $velocity); echo "Kinetic energy: $energy Joules\n";
代码使用浮点数值计算动能(½mv²)。科学计算通常需要浮点数精度。**
运算符用于指数运算。结果保持小数精度。
最佳实践
- 精度:注意浮点数的精度限制。
- 比较:浮点数比较请使用 epsilon 比较,而不是 ==。
- 类型提示:为提高代码清晰度,请使用浮点数类型提示。
- 科学计数法:用于表示非常大/小的数字。
- BCMath:对于精确的十进制数学,请考虑 BCMath 扩展。
来源
本教程介绍了 PHP 浮点数,并通过实际示例展示了浮点数的声明、运算、精度和科学应用。
作者
列出 所有 PHP 教程。