在一个复杂的查询中,我有这样一个注释:
result.annotate(test=ExpressionWrapper(485.00 / F( 'period_duration' ),
output_field=DecimalField()))
这给了我正确的结果:
Decimal('8.01917989417989E-10')
然而,如果我替换
485.00
具有
485
:
result.annotate(test=ExpressionWrapper( 485 / F( 'period_duration' ),
output_field=DecimalField()))
我得到:
Decimal('0')
如果不是485也来自一个叫做
value
“.我的问题如下:
result.annotate(test=ExpressionWrapper( F( 'value' ) / F( 'period_duration' ),
output_field=DecimalField()))
价值观是一种价值观
MoneyField
基本上只是一个围绕着德米尔菲尔德的花式包装。
我可以强迫我的用户总是使用正确的小数(
485
而不是
485
),这本身就是一个糟糕的设计,但是。。。即使如此,如果数据库值为
485
,Django的行为就好像
485
于是又回来了
0
在做浮点数学的时候。
我试过了
Cast
将价值传递给
DecimalField
,没有用。
result.annotate( res=ExpressionWrapper(
Cast('value', output_field=DecimalField()) / F( 'period_duration' ),
output_field=DecimalField() )).last().res
结果总是:
十进制('0')
而不是正确的:
十进制('8.01917989417989E-10')
我怎样才能强迫Django始终使用浮点数学?
附笔
period_duration
是
604800000000
,如果有帮助的话。