我目前正在尝试在Firebase(云Firestore)上保存值。
我的问题很简单:我想保存Double值,但是当一个数字像113而不是145.3时,该值会自动保存在Long中。
这是一个问题,因为我的Android应用程序因此而崩溃,并且同时处理Double和Long值是一团糟。
我尝试过:
# replacing GST to UTC in original string
s_dt = 'Mon Jul 01 17:17:37 GST'.replace("GST", "UTC")
# getting the hours from the string
s_dt_obj = int(s_dt.split(":")[0][-2:])
# substracting 4 from the hours (in order to create UTC equivalent of GST time)
s_dt_obj = str((s_dt_obj - 4) % 24)
# putting everything back to a string
s_dt_obj = f"{s_dt.split(':')[0][:-2]}{s_dt_obj}:{s_dt.split(':')[1]}:{s_dt.split(':')[2]}"
# creating datetime object out of our newly created string
datetime.datetime.strptime(s_dt_obj, '%a %b %d %H:%M:%S %Z')
# datetime.datetime(1900, 7, 1, 13, 17, 37)
它不起作用,如果我执行console.log(value),我得到15(不是Double I 猜)。
我也尝试过:
parseFloat(15)
它不起作用,值保存在String中。
感谢您的帮助,在Web上处理此问题要比在iOS或Android上复杂得多...
答案 0 :(得分:0)
根据有关data types in Cloud Firestore的官方文档,有两种数字数据类型:
浮点数:64位双精度,IEEE 754。
整数:64位,已签名
以及您问题的解决方案:
我的问题很简单:我想保存Double值,但是当一个数字像113而不是145.3时,该值会自动保存在Long中。
如果您想将113
保存为两倍,则将其另存为113.3
,而不是另存为113
,因为Firestore会看到113
是Integer
类型的简单数字,它将相应地保存。始终根据所需的数据类型保存数据。
编辑:
添加113
或113.0
都无关紧要,该值在数据库中另存为113
。如果要以113.0
的形式获取,则必须以double
的形式获取。在Android中,您可以使用以下代码行:
double doubleValue = document.getDouble("myDoubleProperty");
即使myDoubleProperty
拥有113
的整数值,也可以将其保存为双精度型。双精度型总是可以容纳一个整数,而没有特定的强制转换则不能容纳双精度型。