1

10 進数はデフォルトで非常に予想外に丸められます。これを正常に機能させるには、ROUND_HALF_UPオプションを使用する必要があります。

>>> from decimal import *
>>> Decimal("2.5").quantize(Decimal(1))
Decimal('2')
>>> getcontext().rounding = ROUND_HALF_UP
>>> Decimal("2.5").quantize(Decimal(1))
Decimal('3')
>>> Decimal("2.4").quantize(Decimal(1))
Decimal('2')

私の質問は、プロジェクトでグローバルに機能するように、Django アプリケーションのどこで丸めオプションを設定する必要があるかということです。グローバルとは、テンプレート (floatformat テンプレート タグ)、ビュー、モデルの 10 進数フィールドなどを意味します。

4

4 に答える 4

3

1.9.5 で動作 (@ark からのコメントに基づく):

myapp/apps.py 内

from __future__ import unicode_literals
import decimal
from django.apps import AppConfig


class MyAppConfig(AppConfig):

    name = 'myapp'

    def ready(self):
        # Set precision
        decimal.getcontext().prec = 9
        decimal.getcontext().rounding = decimal.ROUND_HALF_DOWN

settings.py で

INSTALLED_APPS = list(INSTALLED_APPS)
INSTALLED_APPS.append('myapp.apps.MyAppConfig')
于 2016-05-07T19:56:39.730 に答える
1

Decimal は Django とは何の関係もありません。それらは標準の python ライブラリの一部です。このgetcontext関数は現在のスレッドのコンテキストを返すため、特別なことをしていなければ、すべてのリクエストが 1 つのスレッドで実行されます。これは基本的に、settings.pyファイルでオプションを設定するだけで十分であることを意味します。

于 2013-08-06T19:09:09.460 に答える