如何在实时数据库中存储货币值

时间:2018-08-12 14:09:15

标签: android firebase firebase-realtime-database

我有以下数据。对我来说都是Double类型。但是Firebase始终将69.0作为69。然后我无法将房地产价格声明为Double,因为我遇到了例外情况:

  

firebase.database.DatabaseException:无法转换类型的值   java.lang.Long为Double

是否可以将Double类型强制设置为特定属性?

enter image description here

1 个答案:

答案 0 :(得分:2)

如果要将货币值存储在数据库中,请考虑到浮点数可能是不准确的,因为根据IEEE 754规范,浮点数的表示方式。对此进行完整的讨论还为时太长。

您可以通过以下方法解决此问题:将所有价格值乘以某个值,该值会消除数字的小数部分,并且仅存储整数。以美元为例,货币单位不小于1美分。与其存储浮点值.01来表示此精度(可能会丢失精度),不如将它乘以100并存储一个整数1,而不会丢失任何精度。

如果我这样从价格中消除浮点数,那么我现在只存储整数值。在客户端上阅读它们之后,我仍然必须将它们格式化为美元和美分,这意味着我必须编写一些额外的代码以将价格值(例如“ 399”)格式化为“ $ 3.99”,这并不困难,我可以做到不会失去任何精度。

如果要存储除美元以外的其他货币值,则可能会有不同的方案,但是思路是相同的-将分式价格转换为整数以存储在数据库中,然后按照用户期望的格式设置这些值看到他们。