我将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
这种转变发生在哪里?!
答案 0 :(得分:1)
此JSON文字:
{
"phoneNumber": 180010000001
}
定义一个属性为"phoneNumber"
的JSON对象,其值为JSON number:180010000001
。注意:该值不是JSON字符串,就像它一样,它将在引号中并且看起来像这样:
{"phoneNumber": "180010000001"}
回到原始版本:它是一个JSON编号,因此当解析JSON文本并将其转换回Java或Go值时,它将是一个浮点数。当打印浮点数时,通常(当数字太“大”或太“小”时)使用scientific notation,在您的情况下是:
180010000001 = 1.80010000001E11
如果您想避免这种情况(您应该),您必须将您的电话号码声明为long
类型(使用Java)或uint64
(使用Go),或者只是简单地声明它为string
类型,因此不会出现舍入错误的“神秘”格式。
如果您已将它作为double保存在MongoDB中,请加载全部并将其重新保存为string
(最好),或者如果您不想这样做,请将其转换为{{1在发送给您的客户之前。