我有一个存储货币金额的应用程序。我想将其存储在Cloud Spanner中。由于well-known problems具有浮点精度,因此使用FLOAT64
是危险的。
其他数据库为此类型的用例提供了NUMERIC
类型。我应该在Cloud Spanner中做什么?
答案 0 :(得分:2)
Cloud Spanner不提供NUMERIC
类型或DECIMAL
类型。
一种解决方法是将数量存储在INT64
列中,并将它们存储在将要使用的最细粒度单位中。例如,如果您使用美元交易,则可以以美分(0.01美元)存储数量。因此,7.13美元将在您的列中显示为713美分。对于某些应用程序,您可能需要更细的粒度(例如,微美元),以最大程度地减少取整问题。
还有其他解决方法。例如,您可以以某种方式将数字值序列化为字符串并将其存储在STRING
或BYTES
列中。天真地,仅存储"7.13"
可以工作,但是当然还有更复杂的表示形式(例如,像"{'dollars': 7, 'cents': 13'}"
这样的JSON对象)。
答案 1 :(得分:1)
Cloud Spanner现在支持NUMERIC数据类型,其精度为38个十进制数字,其中小数点后为9。 请参阅文档here。