【问题标题】:Android SQLite getting long from databaseAndroid SQLite 从数据库中得到很长时间
【发布时间】:2013-08-29 03:14:34
【问题描述】:

我正在尝试从数据库中获取两个浮点数(纬度和经度)。我知道它们的编写是正确的,因为我在应用程序中打开了数据库,它说这两个值是 42.9512 和 -83.4225(只是我选择添加的一个随机位置)。

我最初在我的 db 类的一个方法中将这两个值作为一个包返回,但还创建了一个只返回纬度的方法(只是为了测试它是否可以工作):

    public long getLat(long l) throws SQLException {
        String[] cols = new String[]{KEY_ROWID,KEY_ADDRESS,KEY_LATITUDE,KEY_LONGITUDE};
        Cursor c = ourDB.query(DATABASE_TABLE, cols, KEY_ROWID + "=" + l, null, null, null, null);
        if(c != null) {
            c.moveToFirst();
            long lat = c.getLong(2); //latitude column
        return lat;         
        }
        return 0l;
    }

返回此值的类是我的类,它显示所有数据库内容(纬度/经度除外)。这是代码的一部分:

    Bundle favLoc = temp.getLatLng(rowID);
    long lat = temp.getLat(rowID);      
    long lng = favLoc.getLong("lng");
    Toast.makeText(SQLView.this, "Row id: " + rowID + "\nlat: " + lat + "\nlng: " + lng, Toast.LENGTH_LONG).show();
    Intent i = new Intent("com.blah.blah.MAINACTIVITY");
    i.putExtras(favLoc);
    setResult(RESULT_OK, i);
    finish();   
    break;

temp 是我的 DBHelper 类的一个实例。我尝试从 Bundle 中获取 long 值,但我稍微更改了代码以尝试使用专门为 lat 值创建的新方法获取 lat 值。 我使用 toast 作为调试工具只是为了显示值。

由于某种原因,打印输出的值始终打印为 int 而不是 float - 因此 lat 打印为 42 而不是 42.9512,lng 打印为 -83 而不是 -83.4225。

我似乎无法理解为什么会发生这种情况。如果有人可以帮助我解决这个问题,将不胜感激。

【问题讨论】:

  • 我不明白你的问题。您是在问为什么浮点数在转换为长整数时会四舍五入?

标签: android sqlite android-sqlite


【解决方案1】:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

long 是一个 64 位整数类型,这就是你得到四舍五入值的原因。

如果您想获取浮点值,请使用floatdouble。 (首选double)。

【讨论】:

  • 我所见过的所有东西都喜欢双倍地理纬度是双倍的
  • 我没有错过这一点,但他在他的问题中写了“float”:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多