问题描述
- SQlite 数据库不能存储double 值为字符串
-
我使用下面的代码public boolean addArea(AreaClass area , ArrayList<AreaMarkClass> areaArray) { area.id = getNextAreaId(); Log.d("longitude", area.longitude); Log.d("latitude", area.latitude); ContentValues initialValues = new ContentValues(); initialValues.put("_id", area.id); initialValues.put("name", area.name); initialValues.put("longitude", area.longitude); initialValues.put("latitude", area.latitude); initialValues.put("zoomLevel", area.zoomLevel); initialValues.put("creationDate",area.creationDate); try { mDb.insertOrThrow("TTArea", null, initialValues); }
area.longitude 是一个字符串,它的值通过
String.value (A Double Value)
获得,现在通常是像22.323434523464563456
但是当我检索这个值时:public AreaClass getAreaClassWithAreaId(Integer id) { String queryString = "SELECT * FROM TTArea WHERE _id = ?"; Cursor resultSet = mDb.rawQuery(queryString, new String[]{id.toString()}); AreaClass area = new AreaClass(); while(resultSet.moveToNext()) { area = new AreaClass( resultSet.getInt(resultSet.getColumnIndex("_id")), resultSet.getString(resultSet.getColumnIndex("name")), resultSet.getString(resultSet.getColumnIndex("longitude")), resultSet.getString(resultSet.getColumnIndex("latitude")), resultSet.getString(resultSet.getColumnIndex("zoomLevel")), resultSet.getString(resultSet.getColumnIndex("creationDate")) ); } resultSet.close(); return area; }
大约是
22.3234
。 在我的程序中我需要存储精确的数值。如何处理这个问题?
解决方案
以String类型保存到数据库里。
String longitude = String.valueOf(area.longitude);
String latitude = String.valueOf(area.latitude);
initialValues.put("longitude", longitude);
initialValues.put("latitude", latitude);
取值的时候用Double.parseDouble(longitude/latitude);
时间: 2025-01-30 13:45:10