我有以下数据。对我来说都是Double类型。但是Firebase始终将69.0
作为69
。然后我无法将房地产价格声明为Double,因为我遇到了例外情况:
firebase.database.DatabaseException:无法转换类型的值 java.lang.Long为Double
是否可以将Double类型强制设置为特定属性?
答案 0 :(得分:2)
如果要将货币值存储在数据库中,请考虑到浮点数可能是不准确的,因为根据IEEE 754规范,浮点数的表示方式。对此进行完整的讨论还为时太长。
您可以通过以下方法解决此问题:将所有价格值乘以某个值,该值会消除数字的小数部分,并且仅存储整数。以美元为例,货币单位不小于1美分。与其存储浮点值.01来表示此精度(可能会丢失精度),不如将它乘以100并存储一个整数1,而不会丢失任何精度。
如果我这样从价格中消除浮点数,那么我现在只存储整数值。在客户端上阅读它们之后,我仍然必须将它们格式化为美元和美分,这意味着我必须编写一些额外的代码以将价格值(例如“ 399”)格式化为“ $ 3.99”,这并不困难,我可以做到不会失去任何精度。
如果要存储除美元以外的其他货币值,则可能会有不同的方案,但是思路是相同的-将分式价格转换为整数以存储在数据库中,然后按照用户期望的格式设置这些值看到他们。