2012-02-01 37 views
3

當使用Avg聚合爲models.DecimalField時,返回的值是float,而不是decimal.Decimal。這是因爲我的具體數據庫(在這種情況下sqlite3)不支持聚合值作爲小數?如果是這樣,那裏有數據庫嗎?有沒有辦法解決這個問題(即將數值返回爲小數點的方法),以便精確計算小數(也可以不將float轉換爲str,然後再轉換回decimal.Decimal)?在Django的DecimalField中,我可以從平均值中獲得Decimal嗎?

注意:對於那些認爲「足夠精確」與「準確」相同的人,或者因爲錯誤的基於浮點的算術而討論Star Ship Enterprise崩潰的人,我並不是在拖釣。

+1

我剛剛搜索了'星艦企業基於浮點運算'。無論如何,在PostgreSQL上我也得到一個浮點數。 – 2012-02-01 03:34:27

+1

這是一個奇怪的具體說明。 – millimoose 2012-02-01 03:49:07

回答

1

SQLLite 3 manual,所支持的數據類型是nullintegerreal(有效float),text,或者blob。基於此,我期望引擎可以將任何輸入decimal.Decimal轉換爲real,然後將其作爲float返回給您,因爲它不想將其轉換爲精度。

大多數實際的數據庫(對於任何比原型更多的東西我都不會考慮sqllite)支持十進制數據類型。我知道MySQL does。至於他們是否會返回decimal.Decimal而不是float,我不能告訴你,不幸的是,我還沒有對他們的準確性進行調查,float對我來說已經足夠好了。這將是一個開始的好地方。