我正在使用以下代码
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
获得(双倍值)
现在通常它是这样的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
。在我的应用程序中,我需要精确的存储。这是什么行为,我该如何解决这个问题?
答案 0 :(得分:2)
我在使用SQLite时使用这些方法:
public static Double stringToDouble (String x)
{
if (x !=null)
return Double.parseDouble(x);
return null;
}
public static String doubleToString (Double y)
{
if (y != null)
return String.valueOf(y);
return null;
}
添加到数据库时将double值转换为string,反之亦然,请告诉我此解决方案是否有效
编辑:解决方案在评论中: “我看到你用STRING字段创建了你的表。你可以尝试使用TEXT类型,对我有用。”