为什么在< =运算符在PHP中为true时返回false?

时间:2014-07-06 23:05:58

标签: php double operator-keyword

这是php代码: 当$ lat和$ lng在增量之后等于0.087时,while循环返回false并在它应该返回true时断开循环,因为它是一个< =运算符。有人可以向我解释原因吗?

$lat = 0.029;
$lng = 0.029; 
while ( $lat <= 0.087 && $lng <= 0.087 ){
   $lat += 0.029;
   $lng += 0.029;
}

2 个答案:

答案 0 :(得分:0)

看起来你在这里讨论的浮点表示法有问题:
PHP rounding error
该怎么办是另一个问题......你可以像这样使用bcadd函数:

$lat = 0.029;
$lng = 0.029;
$c = 0.029;

while ( $lat <= 0.087 && $lng <= 0.087){

   $lat = bcadd($lat, $c, 3);
   $lng = bcadd($lng, $c, 3);

}

答案 1 :(得分:0)

检查您是否有BC MathGMP

<?php

if (class_exists("GMP")) {
  $lat = new GMP(0.029);
  $lng = new GMP(0.029);
  while ($lat <= 0.087 && $lng <= 0.087) {
    $lat += 0.029;
    $lng += 0.029;
  }
}
elseif (function_exists("bcadd")) {
  $lat = 0.029;
  $lng = 0.029;
  while ($lat <= 0.087 && $lng <= 0.087) {
    $lat = bcadd($lat, 0.029, 3);
    $lng = bcadd($lng, 0.029, 3);
  }
}
else {
  trigger_error("Please install GMP of BC Math.");
}