【问题标题】:MySQL SELECT query rounding double to 12 places after decimalMySQL SELECT 查询四舍五入到小数点后 12 位
【发布时间】:2014-10-27 10:45:29
【问题描述】:

我在 PHP 中有以下 MySQL 查询:

function queryTagsTable($tag) {
    global $pdo;
    $sql = "SELECT id, latitude, longitude FROM tbl WHERE id IN (SELECT id FROM `tbl_tags` WHERE tag = :tag)";
    $stmt = $pdo->prepare ( $sql );
    $stmt->bindValue(':tag', $tag);
    if ($stmt->execute()) {
        $result = $stmt->fetchAll();
        foreach ($result as $row) {
            echo $row['id'].', '.$row['latitude'].', '.$row['longitude'].' ';
        }
    }
}

在我的数据库中,对于等效的原始 sql 查询,我得到以下结果:

276     32.082504109184285  34.89628862589598

然而,我的 PHP 代码的回显似乎总是将纬度和经度结果四舍五入到小数点后 12 位,产生:

276, 32.082504109184, 34.896288625896

在我的数据库中,id 是 INTEGER,而纬度和经度是 DOUBLE。我希望 PHP 查询返回纬度和经度的完整值,以产生最大精度。如何从我的 PHP 函数接收这些结果的全部价值?

【问题讨论】:

  • @Rajarshi Goswami 该链接不适用,因为数据类型不同,并且该答案仅适用于 DECIMAL 类型
  • @RajarshiGoswami 所以你建议我将纬度和经度的数据类型更改为 DECIMAL?

标签: php mysql mysqli


【解决方案1】:

我怀疑问题是双精度在 MySQL 和 PHP 中具有不同的精度。尝试将双精度转换为字符串,以便 PHP 不会自动转换它们:

SELECT id, CAST(latitude AS CHAR(32)) AS latitude, CAST(longitude AS CHAR(32)) AS longitude FROM tbl WHERE id IN (SELECT id FROM `tbl_tags` WHERE tag = :tag)

【讨论】:

  • 这对我不起作用。经纬度返回为空
  • 是的,你是对的。虽然显然当我运行您的示例时,浮动加载正常。
  • 你是在运行原始的sql还是php?当您运行 php 代码时,它会从我的表中返回完整的值,而不是仅四舍五入到 12 位的值?
  • 我通过 PHP、phpMyAdmin 和 mysql 客户端都试过了,都很好。我正在使用 PHP 5.5.1
  • 我已经更新了我的答案,请使用新版本。
猜你喜欢
  • 1970-01-01
  • 2016-07-09
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 2012-01-03
相关资源
最近更新 更多