任意精确数字,Google App Engine,Python,NDB

时间:2014-08-08 01:01:56

标签: python google-app-engine google-cloud-datastore app-engine-ndb arbitrary-precision

作为一项学术活动,我试图使用python和NDB存储在谷歌应用引擎中实现任意精度(称为AP)系统。我知道那里有AP库,所以我们可以跳过它。

我很好奇如何以一种可以通过大于,小于和等于运算符查询的方式存储来自AP库的数字。理想情况下,这可以使用NDB模型中的自定义属性类来完成,但由于NDB模型使用Python并且Python本身不支持AP编号,因此我不确定这是否可行。如果你们都同意,那么我们可以继续谈论存储 - SQL,MongoDB,NDB等。

据我所知,AP系统经常将AP编号分成系数(在数组中?),指数和符号。如果我们存储了这些,那么这些字段中是否有一组过滤器可以实现大于,小于和等于操作?如果系数确实存储为数组,是否甚至可以存储系数?

提前致谢!

2 个答案:

答案 0 :(得分:0)

这是一种可能的解决方案。首先,我需要使用Decimal对象,它听起来不需要AP库。为了存储它,我可以使用类的方法之一将其转换为字符串。例如,get a tuple来自它,并转换为字符串。然后,我可以将该字符串存储在NDB文本Property中,并使用额外的ComputedProperty将该字符串转换为Decimal。

但是,我不确定ComputedProperty如何存储在NDB中,如果它真的是AP,那么查询就很有用。 The docs说"计算出的值被写入数据存储区,以便可以查询..."。但它是否存储为实际小数?或AP号码?

答案 1 :(得分:0)

您需要使用子类属性:https://cloud.google.com/appengine/docs/python/ndb/subclassprop

在你的情况下,或者作为一个字符串(然后将它转换回_from_base_type中的Decimal)或者作为两个整数(一个表示整数的整数,以及用于返回数字的除数指数)(例如0.123为123和3)如123/10 ^ 3 == 0.123)。

ComputedProperty无法将数据类型存储在正常类型之外。