3

Avgの集計を使用する場合models.DecimalField、戻り値は。floatではなく、decimal.Decimalです。これは、私の特定のデータベース(この場合はsqlite3)が小数としての集計値をサポートしていないためですか?もしそうなら、そうするデータベースはありますか?これを回避する方法(つまり、値を10進数として戻す方法)があります。これにより、正確な10進数の計算を実行できます(また、をaに変換してfloatから、strに戻すこともありdecimal.Decimalません)。

注:私は、「十分に正確」は「正確」と同じであると信じている人々との戦い、または誤ったフロートベースの算術によるStarShipEnterpriseのクラッシュについての議論のための炎の餌付けをしていません。

4

1 に答える 1

1

SQLLite 3のマニュアルによると、サポートされているデータ型は、、、null(事実上) 、、、またはです。これに基づいて、エンジンが入力をにキャストし、それをあなたに返すことを期待します。それは、精度を超えてそれをアップキャストしたくないからです。integerrealfloattextblobdecimal.Decimalrealfloat

ほとんどの実際のデータベース(プロトタイプ以外のSQLliteはほとんど考えていません)は、10進データ型をサポートしています。私はMySQLがそうすることを知っています。彼らが戻ってくるかどうかについては、残念ながら私は彼らの正確さの調査をしていなかったので、あなたに言うことができませんでした、decimal.Decimal私にとっては十分でした。しかし、それは始めるのに良い場所でしょう。floatfloat

于 2012-02-01T17:21:13.207 に答える