2014-10-13 34 views
-1

編輯:我發現我的問題= X事實上,我意外地從另一個迭代器中引入了一個值,該值在操作中導致了一個靜態值。我的錯。劃分使用字典值不想要的四捨五入

問題:我刪除了問題還是留下了問題?

我正在嘗試編寫一個腳本,它從嵌套字典中讀取值,然後執行除法操作並將其作爲鍵值對在嵌套字典中返回。

於是我開始了與此:

main_dict = {nested: {first_number: int, 
         second_number: int} 

      nested1: {first_number: int, 
         second_number: int} 
      ... 
      } 

我想要得到的是:

main_dict = {nested: {first_number: int, 
         second_number: int 
         wanted_number: float} 

      nested1: {first_number: int, 
         second_number: int 
         wanted_number: float} 
      ... 
      } 

是什麼做的是:

for nested in main_dict: 
    main_dict[nested]['wanted_number'] = float(main_dict[nested]['first_number']) 
             /float(main_dict[nested]['second_number']) 

因此,例如,FIRST_NUMBER = 11,second_number = 15,我應該得到

main_dict[nested]['wanted_number'] = 0.733... 

而是我得到

main_dict[nested]['wanted_number'] = 1.0 

到目前爲止,我曾嘗試使用:from_future進口部,numpy的的true_division,這都應該是多餘的,因爲我使用Python 3.4。

輸出類型爲float(),並且我試圖在除法之前將值顯式轉換爲float()。我也嘗試過一個是float(),另一個是int()。我也嘗試使用帶有getcontext()的十進制模塊。prec = 6.

這是執行函數的一個特性,或者可能是值指向bin的方式?

回答

1

應該沒有這樣的四捨五入。

通過在for循環中打印出來,確認您劃分的數字確實不同。

你是對的,在Python3中你不需要任何魔法就可以實現浮點除法。甚至不需要float()

Python 3.3.2+ (default, Feb 28 2014, 00:52:16) 
[GCC 4.8.1] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> 11/15 
0.7333333333333333 

你沒有顯示如何構造字典。確保你使用不同的子詞典,而不是引用相同的子詞典或其他東西。

在REPL中運行它以向我們展示您所看到的內容。

>>> main_dict = {'nested': {'first_number': 11, 
...      'second_number': 15}, 
...    'nested1': {'first_number': 3, 
...      'second_number': 4} 
...    } 
>>> 
>>> for nested in main_dict: 
...  main_dict[nested]['wanted_number'] = main_dict[nested]['first_number']/main_dict[nested]['second_number'] 
... 
>>> main_dict 
{'nested1': {'wanted_number': 0.75, 'second_number': 4, 'first_number': 3}, 'nested': {'wanted_number': 0.7333333333333333, 'second_number': 15, 'first_number': 11}} 
+0

我通過調用整個main_dict並手動檢查數字來檢查。這就是我發現錯誤的方式。我還調用main_dict [nested] ['first_number'],main_dict [nested] ['second_number']和main_dict [nested] ['wanted_number']來檢查所有類型和數字。 wanted_number返回float和1.0。我也只是檢查和腳本15/15讓我0.0所以我真的很困惑 – cyneo

+0

我認爲你正在尋找錯誤的地方的錯誤。它在你的代碼中的其他地方。張貼顯示此錯誤的最短片段,以便我們可以複製它 –