2016-07-16 88 views
2

我计算领域在我看来,文件如果我乘以2浮点数,结果会不同,然后乘以2位小数?

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

它可以是转换值浮动乘法引起该错误之前?

+1

转换为浮动不会产生错误的结果类似。当数字很小并且没有分数时,浮点数与小数点一样好。 – Barmar

+1

'443556'为'666 * 666'。 – Barmar

回答

1

“不能按类型的非诠释‘小数’繁衍序列”

什么这实际上意味着你的操作数是一个序列,另一种是一个小数。即,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' 
0

你为什么要将它转换为浮动?十进制就足够了。即使你不转换它,结果仍然是一样的。

如果你真的想将它转换为某种原因,然后用这个方法:

data_dict = { 'quantity_order': float(bom.quantity * quantity)} 

,但是这不会改变小数位的数量。

+0

添加浮点数转换,因为我得到一个不同的问题: “不能乘以类型'小数'的非int'序列” –

+0

你从哪里得到bom.quantity和数量?和什么是数据类型?它是整数还是浮点数?如果是float,那么它会抛出一个错误,因为float和Decimal不能在一起。 – aldesabido

+0

它来自请求吗? – aldesabido