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()
在模型的save方法中,舍入选项已恢复为ROUND_HALF_EVEN-对我来说,存在多个上下文?
我想了解是否可以在全局范围内将小数设置为ROUND_HALF_UP,如果可以,我的代码哪里出问题了?
我目前正在django开发服务器上运行该应用程序,并使用Python 3.6.4
答案 0 :(得分:0)
通过在Django应用__init__
中将最高定义放置在config/__init__.py
上,我们可以做到这一点。
出于我们的目的,我们还将覆盖DefaultContext
的四舍五入:
decimal.DefaultContext.rounding = decimal.ROUND_HALF_UP
decimal.setcontext(decimal.DefaultContext)
答案 1 :(得分:0)
getcontext 仅适用于当前线程,不会在执行视图时调用。相反,您应该在应用配置或 settings.py 中设置 DefaultContext。所有其他线程将自动继承此上下文。
例如,在 settings.py 中添加:
DefaultContext.rounding=ROUND_HALF_UP