我使用整数还是浮点数?

时间:2010-11-15 00:24:54

标签: python google-app-engine floating-point integer google-cloud-datastore

这是Google App Engine中的模型:

class Rep(db.Model):
    mAUTHOR = db.UserProperty(auto_current_user=True)
    mUNIQUE = db.StringProperty()
    mCOUNT = db.IntegerProperty()
    mDATE = db.DateTimeProperty(auto_now=True)
    mDATE0 = db.DateTimeProperty(auto_now_add=True)
    mWEIGHT = db.FloatProperty()

因此,mCOUNT是整数,mWEIGHT是浮点数。我像这样计算项目的年龄:

    age1 = datetime.datetime.now() - rep.mDATE0
    age_hour = float(age1.seconds) / 3600
    rep.mWEIGHT = float((rep.mCOUNT - 1) / (age_hour + 2)**1.5)

但是当我尝试这样的查询时:

QUERY = Rep.all()
QUERY.filter("mAUTHOR =", user)
QUERY.order("-mWEIGHT")
RESULTS = QUERY.fetch(10)    

for result in RESULTS:
    self.response.out.write("mUNIQUE: <b>%s</b> | "
                                "mWEIGHT: %f | "  
                                "mCOUNT: %s | <br />"  
                             % (result.mUNIQUE, 
                                result.mWEIGHT,
                                # line 103                               
                                result.mCOUNT,
                                ))  

我在第103行得到TypeError

result.mCOUNT,
TypeError: a float is required                                                              

为什么mCOUNT会浮动?顺便说一下,只有当项目不在数据存储区中并且第一次由else的{​​{1}}子句写入时,才会引发错误。

你能帮我使用正确的类型吗?谢谢你的帮助。

if loop

修改

我刚注意到我----------------------------------------------------- 的字符串格式%f,将其更改为mWEIGHT似乎解决了问题(但我不知道原因。是不是因为{ {1}}):

%s

以下是一些价值观:

mWEIGHT=None

有关如何将for result in RESULTS: self.response.out.write("mUNIQUE: <b>%s</b> | " # changing %f to %s appears to solve the problem. "mWEIGHT: %f | " "mCOUNT: %s | <br />" % (result.mUNIQUE, result.mWEIGHT if result.mWEIGHT is not None else 0.0, result.mWEIGHT, result.mCOUNT, )) 添加到mUNIQUE: A | mWEIGHT: 0.299954933969 | mCOUNT: 2 | mUNIQUE: Z | mWEIGHT: 0.0 | mCOUNT: 1 | # With answer by TokenMacGuy mUNIQUE: R | mWEIGHT: None | mCOUNT: 1 | # with %f changed to %s mUNIQUE: P | mWEIGHT: None | mCOUNT: 1 | # with %f changed to %s 条款的任何建议吗?

rep.mWEIGHT

整个代码如下:

else

1 个答案:

答案 0 :(得分:1)

看起来您偶尔设置mWEIGHT。如何改变

for result in RESULTS:
        self.response.out.write("mUNIQUE: <b>%s</b> | "
                                "mWEIGHT: %f | "  
                                "mCOUNT: %s | <br />"  
                             % (result.mUNIQUE, 
                                result.mWEIGHT,  
                                result.mCOUNT,
                                )) 

for result in RESULTS:
        self.response.out.write("mUNIQUE: <b>%s</b> | "
                                "mWEIGHT: %f | "  
                                "mCOUNT: %s | <br />"  
                             % (result.mUNIQUE, 
                                result.mWEIGHT if result.mWEIGHT is not None else 0.0,  
                                result.mCOUNT,
                                ))