【问题标题】:Why is this integer considered a float?为什么这个整数被认为是浮点数?
【发布时间】:2018-09-29 05:27:04
【问题描述】:

我创建了以下脚本,用于确定在我的网站上显示哪些页码以进行导航。

// query the database

$statement = $connect->prepare("SELECT COUNT(report_number) FROM reports");
$statement->execute();
$result = $statement->fetch(PDO::FETCH_ASSOC);
$rowCount = $result["COUNT(report_number)"];
$pgCount = ceil($rowCount / 10);


// fetch the corresponding entries from the database

if (!isset($pgParamArray["page"]) || $pgParamArray["page"] === $pgCount) {
  $pgParamArray["page"] = $pgCount;
  $sql = "SELECT * FROM reports ORDER BY report_number DESC LIMIT 10";
} elseif (isset($pgParamArray["page"])) {
  $offset = ($pgCount - $pgParamArray["page"]) * 10;
  $sql = "SELECT * FROM reports ORDER BY report_number DESC LIMIT " . $offset . ",10";
}


// calculate and display the appropriate page numbers

$upperDiff = $pgCount - $pgParamArray["page"];
$lowerDiff = $pgParamArray["page"] - 1;

for ($i = 0; $i < 5; $i++) {

  $pgNo = 0;

  if ($pgParamArray["page"]+2 <= $pgCount && $pgParamArray["page"]-2 >= 1) {
    $pgNo = $pgParamArray["page"] + ($i - 2);
  } elseif ($pgCount < 5) {
    $pgNo = $i+1 <= $pgCount ? $i+1 : 0;
  } elseif ($upperDiff < $lowerDiff && $upperDiff < 2 && $upperDiff >= 0) {
    $pgNo = ($pgCount - 4) + $i;
  } elseif ($lowerDiff < $upperDiff && $lowerDiff < 2 && $lowerDiff >= 0) {
    $pgNo = $i + 1;
  } else {
    $pgNo = ($pgCount - 4) + $i;
  }

  if ($pgNo > 0) {
    if ($pgNo !== $pgParamArray["page"]) {
      $pgNoArray[] = ""
        . "<li><div><a href='http://www.somewebsite.com/index.php/?page="
        . $pgNo
        . "'>"
        . $pgNo
        . "</a></div></li>";
    } else {
      $pgNoArray[] = ""
        . "<li><div style='background:#333'>"
        . $pgNo
        . "</div></li>";
    }
  }
}

当我设置$pgParamArray["page"] = $pgCount = ceil($rowCount/10) 时,我注意到最前面的变量仍被视为浮点数。我的问题是为什么 $pgParamArray["page"] 是 float 类型,即使 ceil($rowCount/10) 显然返回一个整数?

【问题讨论】:

  • 不确定为什么会有反对票 - 这似乎是一个合理的问题。虽然答案很简单,但如果你不知道答案,那就很困惑了。
  • @corsiKa 我想我周围有人跟着我,不知道出于什么原因投票我的问题/答案。这是一个合法的问题,因为答案是反直觉的,我当然可以检查文档,但并不是因为“答案”是反直觉的。我觉得他们对我的问题有意见很有趣,但不是答案,哈哈。无论如何,仍然感谢您的关注

标签: php types


【解决方案1】:

根据他们的文档,PHP 的 ceil returns a float

他们的理由:

值向上舍入到下一个最大整数。 ceil() 的返回值仍然是 float 类型,因为 float 的取值范围通常大于 integer。

这不仅仅是 PHP 这样做的 - C++Java 都为它们的上限函数返回浮点值。

【讨论】:

  • 即使它返回一个整数。这太奇怪了,违反直觉。好像将浮点数向上舍入会超出整数的值范围。不会只有一个案例是真的吗? -.-a
  • =) 我更新了我的答案 - 这是多种语言的标准。
  • 哦,伙计,我根本不明白这个理由。从逻辑上讲,不应该只有一种情况将浮点数转换为整数会超出整数类型的值范围吗?
  • @Anthony 我认为原因是你有一个类型进入,你会想要使用相同的类型出来 - 我可能错了。
  • 我想这是有道理的。只是数据与数据描述不匹配,这可能会导致混乱,尤其是在像我这样的 n00bies 中。在我检查数据类型并将!== 更改为!= 之前,它甚至给我带来了一些问题
猜你喜欢
  • 2023-01-25
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2017-07-04
  • 2012-09-28
  • 2014-06-19
  • 2018-07-11
  • 1970-01-01
相关资源
最近更新 更多