这似乎是非常简单的代码,但由于某些原因,它就是行不通。我需要在某些时候输出一个值,但 if 语句似乎没有评估。以下是我正在尝试做的基本版本。
dt=.1
while t<=10:
if t==5:
print('yes')
t+=.1
我真的在我的代码中尝试过这个,我什至让它在每个时间步都打印 t 但它不会打印"is"。我的代码中还有其他 if 语句,如
if 10<=t<60:
do stuff
并且这些 if 语句运行完美。我已经尝试过 t==5.0
和 t==float(5)
以防万一它需要它,但它也没有用。这让我发疯,所以如果有人可以帮助我,那就太好了。我在 Ubuntu 12.4 上的 Spyder 中运行它,我收到一条消息说 import sitecustomize
失败。这会和它有什么关系吗?我已经使用该消息运行代码一段时间了,之前没有引起任何问题。
编辑
得到它的工作,我用过
if int(t)==5 and t<5+dt:
感谢帮助
最佳答案
1) float 没有无限的精度 - 它们在内存中占用一定数量的位(通常是 64 位或 32 位)。
2) 他们对尾数使用二进制内部表示(基本上,除了第一位之外的所有有效数字)。
3) .1 不能精确地存储为二进制表示 - 只能作为二进制位的无限重复模式,并且由于尾数非常大, float 实际上是 .1 的近似值,而不是 .1。 1. (但是,0.5 和 0.25 之类的东西可以)
4) 因此,相加 .1s 并不能保证得到完美的结果——错误的舍入方式会导致错误。例如,.1 与自身相加十次可能会得到 1.0000...1 或 0.999999...9。
参见 http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html每个计算机科学家都应该了解的浮点运算知识
关于python - If 语句不起作用 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15941235/