如何在 Firebase 中始终存储/检索双精度


我想在 Firebase 中存储/检索双精度,

但如果我存储像 5.0 这样的整数,Firebase 将删除 0,并且在检索时,我得到从长到双精度的非法转换。一种解决方案是从字符串中存储和解析浮点值,但 Firebase 表示它将支持双精度类型,因此如果可能的话,我更喜欢使用它。

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

您可以要求 SDK 将其转换为特定类型:

double value = dataSnapshot.child(child).getValue(Double.class);

但是,如果未找到该字段,这将崩溃,因此您可能需要在尝试转换它之前检查它是否存在:

if (dataSnapshot.child(child).exists()) {
    double value = dataSnapshot.child(child).getValue(Double.class);
}

这是因为Firebase基本上将数字存储为长整型或双firebase-realtime-database倍数。如果数字是整数(不是数据类型(,它将存储为 Long 否则,它将存储为 Double。阅读更多

为了克服这个问题,

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());
}

希望这有帮助!

最新更新