php - 小于运算符在 PHP 5.3.1 中无法正常工作

标签 php

为了示例的目的,var 2 从数据库中预设为“147.22”类型的 STRING。 var 1 是先前在脚本中计算的,具有 147.22 类型 FLOAT。

脚本:

<?

$var1 = (float)$var1;
$var2 = (float)$var2;

var_dump($var1);
var_dump($var2);

if($var1 < $var2) { echo "hello"; }

?>

我的预期结果是脚本不会回显“hello”,因为这两个值在数量和类型上都相等。

但是这是我得到的输出:

float(197.22)
float(197.22)
hello

如果我不弄乱类型并保留一个 float 和另一个字符串,那么它仍然不起作用(这就是我首先到达这里的方式)。

如果我在执行时强制值是这样的:

$var1 = 147.22;
$var2 = 147.22;

var_dump($var1);
var_dump($var2);

if($var1 < $var2) { echo "hello"; }

?>

我明白了,(而且有效):

float(197.22)
float(197.22)

注意没有“你好”......

有人知道这里发生了什么吗?

最佳答案

如果其中一个 float 是按数字计算的,而另一个是从字符串赋值创建的,则它们可能不同。尝试以下操作:

$x = 147.22;
$y = 147.2200000000001;
printf("%.40f\n", $x);
printf("%.40f\n", $y);
var_dump($x);
var_dump($y);
var_dump($x < $y);

输出

147.2199999999999988631316227838397026062012
147.2200000000001125499693443998694419860840
float(147.22)
float(147.22)
bool(true)

将它们转换为具有指定精度的字符串以进行比较。

关于php - 小于运算符在 PHP 5.3.1 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8017365/

相关文章:

javascript - 将带有字符串的 javascript 数组发送到 php 操作

PHP session 在屏幕之间不持久

php - 从字符串中获取数字项

php - 有没有办法缩短 PHP 的 HTTP 响应?

PHP 和 MySQL : Find out which file or query is causing heavy CPU load

php - 如何将 Symfony 表中的第一列设置为与第一行相同的格式?

php - 如何获得一系列图像的累积高度?

php - 正则表达式将 <img> 相对 URL 更改为绝对

php - 检查数据库列中是否存在部分字符串

PHP数组根据两个键查找值