存储为字符串的Android SQL Lite int值在检索时显示额外字符

时间:2016-09-20 06:57:39

标签: java string mongodb sqlite go

我将MongoDB数据库中的电话号码存储为Double(错误)。所以数字在数据库中看起来有点像这样 -

180010000001.0

我通过golang后端获取它,它给出的响应令人惊讶的是 -

{
"phoneNumber": 180010000001
}

我没有通过任何结构传递这些数据,它只是一个简单的mgo查询

MgoSession.DB(Dbname).C(collectionName).Find(query).All(&result)

返回接口数组[]interface{}

现在我在我的Android应用程序上使用此Web服务,并在SQL Lite内部存储这些值,以便在整个应用程序中使用,如下所示 -

phoneNumber TEXT

然后我像这样存储它,

contentValues.put("phoneNumber", phoneNumber);

并像这样获取它 -

cursor.getColumnIndex("phoneNumber")

并将其分配给我声明为String

的变量

现在,当我打印出来时,它会显示 -

1.80010000001E11

这种转变发生在哪里?!

1 个答案:

答案 0 :(得分:1)

此JSON文字:

{
"phoneNumber": 180010000001
}

定义一个属性为"phoneNumber"的JSON对象,其值为JSON number180010000001。注意:该值不是JSON字符串,就像它一样,它将在引号中并且看起来像这样:

{"phoneNumber": "180010000001"}

回到原始版本:它是一个JSON编号,因此当解析JSON文本并将其转换回Java或Go值时,它将是一个浮点数。当打印浮点数时,通常(当数字太“大”或太“小”时)使用scientific notation,在您的情况下是:

180010000001 = 1.80010000001E11

如果您想避免这种情况(您应该),您必须将您的电话号码声明为long类型(使用Java)或uint64(使用Go),或者只是简单地声明它为string类型,因此不会出现舍入错误的“神秘”格式。

如果您已将它作为double保存在MongoDB中,请加载全部并将其重新保存为string(最好),或者如果您不想这样做,请将其转换为{{1在发送给您的客户之前。