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



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

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

这种转变发生在哪里?!

这个JSON文本:

{
"phoneNumber": 180010000001
}

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

{"phoneNumber": "180010000001"}

回到原始:它是一个JSON数字,所以当JSON文本被解析并转换回Java或Go值时,它将是一个浮点数。当打印浮点数时,通常(当数字太"大"或太"小"时)使用科学记数法,在您的情况下是:

180010000001 = 1.80010000001E11

如果你想避免这种情况(你应该),你必须将你的电话号码声明为long类型(在Java中)或uint64类型(在Go中),或者最好简单地将其声明为string类型,这样就不会出现舍入错误的"神秘"格式。

如果你已经有它保存在MongoDB作为一个双,要么加载所有并重新保存为string(优选),或者如果你不想这样做,将其转换为string发送给你的客户端之前。

最新更新