是否有可能如果我乘以2个浮点数,结果会不同,那么乘以2个小数?

时间:2016-07-16 01:16:45

标签: python django

我正在查看视图文件中的字段

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

在乘法导致此错误之前,转换值是否可以浮动?

2 个答案:

答案 0 :(得分:1)

  

&#34;不能将序列乘以非整数类型&#39;十进制&#39;&#34;

这实际上意味着你的一个操作数是一个序列而另一个是十进制。即,bom.quantityquantity中的一个是序列而不是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)}

但这不会改变小数位数。