Python 中小数的默认舍入方法是 ROUND_HALF_EVEN。
我有一个 Django 2.0 应用需要在所有模型 DecimalFields 中使用 ROUND_HALF_UP。
我已经尝试了这个问题中给出的所有 3 个答案:
Global decimal rounding options in Django
但没有一个奏效。例如,使用第二个解决方案中给出的 apps.py 方法 - 我已确认 Decimal 的上下文已通过调用
decimal.getcontext()
设置后立即
decimal.getcontext().rounding = decimal.ROUND_HALF_UP
然后我可以通过进入 Django shell 并调用来确认这一点
import decimal
decimal.getcontext()
报告四舍五入=ROUND_HALF_UP
但是,如果我再打电话
decimal.getcontext()
在模型的保存方法中,舍入选项已恢复为 ROUND_HALF_EVEN - 这向我暗示存在不止一个上下文?
我想了解是否可以将 decimal 全局设置为 ROUND_HALF_UP,如果可以,我的代码哪里出错了?
我目前正在 django 开发服务器上运行该应用程序并使用 Python 3.6.4
最佳答案
getcontext 仅适用于当前线程,不会在执行 View 时调用。相反,您应该设置 DefaultContext在应用程序配置或您的 settings.py 中。所有其他线程将自动继承此上下文。
例如,在settings.py中添加:
DefaultContext.rounding=ROUND_HALF_UP
关于python - 在 Django 中全局设置 Decimal 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51560034/