使用dict值划分不需要的舍入

时间:2014-10-13 06:25:19

标签: python python-3.x dictionary floating-point

编辑:我发现我的问题= 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 import division,numpy的true_division,这两者都应该是多余的,因为我使用的是Python 3.4。

输出类型是float(),我试图在除法之前和除法之后将值显式转换为float()。我还试过一个术语是float()而另一个是int()。我也尝试过使用带有getcontext()的decimal模块.prep = 6。

这是执行函数的特征,还是值指向bin的方式?

1 个答案:

答案 0 :(得分: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

您尚未显示dict的构造方式。确保您使用不同的子词典,而不是引用相同的子词典或其他内容。

在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}}