我正在查看视图文件中的字段
data_dict = { 'quantity_order': float(bom.quantity) * float(quantity)}
我添加了浮动转换,因为我遇到了另一个问题:
“不能将序列乘以'十进制'类型的非int”
在模型中,两个字段都定义为十进制
quantity_order = models.DecimalField(max_digits=19, decimal_places=3)
其中一个字段是通过url正则表达式
接收的 url(r'^production/order/new/(?P<pk_bom>\d+)/(?P<pk_soproduct>\d+)/(?P<uri>\S+)/(?P<quantity>\d+(\.\d{1,3}))/$',views.Production_order_new, name="production_order_new"),
所以问题是有时计算不正确。
例如,如果两个数量值均为44
,则会正确计算,但当一个值为44 * 666
时,结果将为443556.000
在乘法导致此错误之前,转换值是否可以浮动?
答案 0 :(得分:1)
&#34;不能将序列乘以非整数类型&#39;十进制&#39;&#34;
这实际上意味着你的一个操作数是一个序列而另一个是十进制。即,bom.quantity
或quantity
中的一个是序列而不是int,float或decimal。
data_dict = { 'quantity_order': float(bom.quantity) * float(quantity)}
序列可以由int进行多重。
seq = [1,2,3]
seq * 2 # produces [1,2,3,1,2,3]
但
seq * 2.5 # produces can't multiply sequence by non-int of type 'float'
答案 1 :(得分:0)
为什么要将其转换为浮动?十进制对此非常好。即使您不进行转换,结果仍然相同。
如果你真的想因某种原因转换它,那么使用这个方法:
data_dict = { 'quantity_order': float(bom.quantity * quantity)}
但这不会改变小数位数。