为什么只有A和B中的A低于29?使用计算作为x参数有什么不同?
#A
floor(x = (1.45/0.05))
#B
floor(x = 29)
> #A
> floor(x = (1.45/0.05))
[1] 28
> #B
> floor(x = 29)
[1] 29
答案 0 :(得分:0)
像@bouncyball一样表明这是一个浮点问题。
如果你去this link并输入1.45或0.05,你会发现他们的二进制表示是"无限的"很长(即你不能用二进制的有限字符串写1.45) 因为您的PC没有无限的存储空间来存储数字,所以#" chops"它在某些时候关闭 - 这意味着他的系统中基本上你的1.45就像1.49999999999(永远不知道9的数量)。 0.05也是如此。
现在你的计算机内部得到的东西是28.9999999999999 - 但是当他输出它时他并不愚蠢。他知道,28.9999999999可能应该是29 - 所以当他输出它时他只是四舍五入。除非你明确告诉他使用" floor" - 然后他将28.99999999轮到28 希望这是有道理的。