我的电话号码存储在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
发送给你的客户端之前。