出于示例的目的,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"; }
?>
Run Code Online (Sandbox Code Playgroud)
我的预期结果是脚本不回显"hello",因为两个值的数量和类型相等.
不过这是我得到的输出:
float(197.22)
float(197.22)
hello
Run Code Online (Sandbox Code Playgroud)
如果我没有弄乱这些类型并让一个浮动而另一个是一个字符串,那么它仍然不起作用(这就是我首先到达这里的方式).
如果我在执行时强制执行这样的值:
$var1 = 147.22;
$var2 = 147.22;
var_dump($var1);
var_dump($var2);
if($var1 < $var2) { echo "hello"; }
?>
Run Code Online (Sandbox Code Playgroud)
我明白了,(并且它有效):
float(197.22)
float(197.22)
Run Code Online (Sandbox Code Playgroud)
注意没有"你好"....
任何人都有任何线索在这里?
如果其中一个浮点数是以数字方式计算的,而另一个是通过字符串赋值创建的,则它们可能不同.请尝试以下方法:
$x = 147.22;
$y = 147.2200000000001;
printf("%.40f\n", $x);
printf("%.40f\n", $y);
var_dump($x);
var_dump($y);
var_dump($x < $y);
Run Code Online (Sandbox Code Playgroud)
输出
147.2199999999999988631316227838397026062012
147.2200000000001125499693443998694419860840
float(147.22)
float(147.22)
bool(true)
Run Code Online (Sandbox Code Playgroud)
将它们转换为具有指定精度的字符串以进行比较.