当我使用 DecimalField 时,我在数据库中的位置很少。不幸的是,我必须同时处理双精度和浮点数据作为输入 - 这是我的问题。
我想做残酷的切断价值(小数点后第二位),而不是数学回合。我存储了几乎不会超过目标的计算值(如果我的值是 49.9832100000032131,它仍然小于 50,所以我不会四舍五入)。但正如我所说 - 我想将其保存为 48.98 在数据库中(小数点后 2 位) - 节省内存和足够的表示。
我的第一个解决方案是使用自定义 django 字段,如下所示:
class DecimalFixedField(models.DecimalField):
def __init__(self, *args, **kwargs):
kwargs['value'] = "{0:.2f}".format( kwargs['value'] )
# or ? self.value = "{0:.2f}".format( kwargs['value'] )
super(DecimalFixedField, self).__init__(*args, **kwargs)
当然我应该在 kwargs 中硬编码 decimal_places = 2 或者在代码中使用它而不是值 2,但是......休息呢?你有提示,更好的主意吗?
重要的是——我不想在代码的很多地方写“{0:.2f}”.format(...) !我想在 OOP 方法中做到这一点,因为我在许多模型中使用 DecimalField ......并且使这种预处理看起来是不错的解决方案。任何想法应该如何正确实施?