我想在Firebase中存储/检索双精度数,但是如果我存储5.0之类的整数,则Firebase会丢弃0,并且在检索时,我得到了从长到双的非法转换。一种解决方案是存储和解析字符串中的浮点值,但是Firebase表示它将支持double类型,因此,我希望尽可能使用它。
double val = 1.0;
dbref.child(child).setValue(val); // '.0' dropped in db
double count = (double)dataSnapshot.child(child).getValue(); //illegal cast from long to double
答案 0 :(得分:1)
您可以要求SDK将其转换为特定类型:
double value = dataSnapshot.child(child).getValue(Double.class);
但是,如果找不到该字段,则会崩溃,因此您可能需要在尝试转换之前检查它是否存在:
if (dataSnapshot.child(child).exists()) {
double value = dataSnapshot.child(child).getValue(Double.class);
}
答案 1 :(得分:0)
这是因为firebase基本上将数字存储为firebase-realtime-database
中的长整数或双精度数。如果数字是整数(不是数据类型),则将其存储为Long,否则将存储为Double。
Read more
要解决此问题,
double count = 0.0;
try{
// stored data is exactly a double
count = (double)dataSnapshot.child(child).getValue();
} catch (Exception ex) {
// stored data is exactly an integer
count = (double)((long)dataSnapshot.child(child).getValue());
}
希望这会有所帮助!