基本上我认为我创建了一个循环,每次迭代只增加.1。我得到的是下面的数字,比如0.300000000000000004,0.79999999999999,3.0000000000000013。这是我的代码和结果。为什么不是。1,。2。3等等,和/或为什么是0.3000000000000004,0.4,0.5,0.6,0.7,0.79999999999等等,基本上为什么它们是出乎意料的,对我来说,小数。你知道吗
>>> tph_bin = []
>>> bin_num = 0
>>> while bin_num <= 3.5:
tph_bin.append(bin_num)
bin_num = bin_num + .1
>>> tph_bin
[0, 0.1, 0.2, 0.30000000000000004, 0.4, 0.5, 0.6, 0.7, 0.7999999999999999, 0.8999999999999999, 0.9999999999999999, 1.0999999999999999, 1.2, 1.3, 1.4000000000000001, 1.5000000000000002, 1.6000000000000003, 1.7000000000000004, 1.8000000000000005, 1.9000000000000006, 2.0000000000000004, 2.1000000000000005, 2.2000000000000006, 2.3000000000000007, 2.400000000000001, 2.500000000000001, 2.600000000000001, 2.700000000000001, 2.800000000000001, 2.9000000000000012, 3.0000000000000013, 3.1000000000000014, 3.2000000000000015, 3.3000000000000016, 3.4000000000000017]
额外的问题:有没有更好的方法来创建一个以.1递增的数字列表?你知道吗
这基本上就是使用浮点数的缺点。数字0.2加0.1刚刚溢出,结果无法放入为float类型保留的内存块中,因此它会剪切溢出的部分并围绕该值进行舍入。如果你想用这种方法处理数字,你应该用整数运算,然后把结果除以10或者只是把值四舍五入,但是千万不要尝试用值来比较浮点值,因为结果可能会令人惊讶。你知道吗
奖励问题的答案:有没有更好的方法来创建一个以.1递增的数字列表?你知道吗
和numpy在一起
这是浮点精度限制。请参考:
https://docs.python.org/2/tutorial/floatingpoint.html
0.1实际上存储为二进制分数:
如您所见,这可能会导致在添加数字时出现二进制舍入错误。你知道吗
如果您只关心小数点后1位的精度,请尝试使用十进制:
相关问题 更多 >
编程相关推荐