【问题标题】:Integer that begins with zero converting to string (and keep that leading zero)以零开头的整数转换为字符串(并保持前导零)
【发布时间】:2012-07-14 14:49:45
【问题描述】:

我的问题是这个,我有一个从浏览器获取 GPS 位置的 javascript 代码。然后,因为我无法将这些坐标从 javascript 写入 SQL 数据库,也无法将其直接发送到 php,所以我转到控制器“站点”,它的方法是“writeToDatabase”,我还向 URL 添加了 4 个段,它们是实际上是我从 javascript 得到的那些坐标。

所以在 javascript 中我有:

window.location = getBaseURL() + "site/writeToDatabase/" + splittedLatitude[0] + "/" + splittedLatitude[1]
        + "/" + splittedLongitude[0] + "/" + splittedLongitude[1] + "/";

所以现在浏览器转到(只是一个假坐标的例子)www.mysite.com/index.php/site/writeToDatabase/47/707223/16/054322

现在我在站点控制器中的 writeToDatabase 方法读取了这些段(我使用 codeigniter,因此很容易读取 URL 段)。读完段后,我将纬度的第一部分和纬度的第二部分连接起来,并加上一个点“。”介于两者之间(所以在这个例子中我得到 47.707223 和 16.54322),我对经度做同样的事情。然后当我将这些数据写入数据库时​​,我在我的数据库中得到奇怪的数字,如果我的一个段以零开头(就像我上面的例子一样),零被删除,所以从 054322 我得到 54322,这导致 16.54322 就像上面的例子一样 :)

现在只有当我尝试写入数据库的整个坐标时才会出现这个奇怪数字的问题。如果我只写经度的第一部分,或者只写经度的第二部分(纬度也是如此),一切顺利并且得到正确的值写的..

其他人有解决这个问题的方法吗?我完全没有想法

【问题讨论】:

  • 带前导零的数字通常被解释为八进制数,如果您将小数部分分开,请检查“奇怪”位是否不是十进制八进制数。
  • 看起来您关心的不是数字,而是字符串。前导零不会以任何方式影响数字。
  • 为什么不直接发送参数:http://www.example.com/foo/bar/?lat=47.11&lng=5.012
  • 我同意@fdomig - 如果在小数点处拆分数字会导致问题,那么不要这样做。
  • @fdomig 谢谢,我会试一试,这似乎是合法的 :) 我可以给你们加点声望点什么的吗?我看不到那个选项

标签: php javascript sql codeigniter gps


【解决方案1】:

为什么不直接发送参数:

http://www.example.com/foo/bar/?lat=47.11&lng=5.012

这确实解决了这个问题。

但是,您可以通过像这样的简单字符串连接按自己的方式进行操作(因为这些是字符串而不是整数)。

$lat = $_GET['first'] . '.' . $_GET['second];

【讨论】:

  • 我仍然无法让它工作.. 现在我的网址看起来像这样:www.mysite.com/index.php/site/writeToDatabase/?lat=45.7071587&lng=16.0575276 并通过 Codeigniter我这样做: $locationGPS = $this->uri->segment(3); $this->db->query('UPDATE table SET locationGPS=' . $locationGPS . ' WHERE id=' . $id);该死的..
【解决方案2】:

整数永远不会有前导零,如果您需要一个 - 创建 CHAR 字段,而不是 INT(并且不要进行类型转换,以防您也手动执行此操作)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    相关资源
    最近更新 更多