2016-07-16 33 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