pry(main)> time = Time.now
=> 2012-01-20 00:10:44 +0000
pry(main)> (time + 4.days).to_f
=> 1327363844.9709609
pry(main)> time.to_f
=> 1327018244.970961
答案 0 :(得分:3)
这是一个浮点舍入问题。您的编号存储为双精度浮点数,精度为53位。 2 ^ 53大致为9 * 10 ^ 15,给出15到16个十进制数字,具体取决于要表示的确切数字。
您可能会注意到这两个数字分别有16位和15位十进制数字。你只是在最后一个地方。事实上,确切的存储值既不是这两个十进制数,也不是仅用分数二进制表示的东西。
答案 1 :(得分:2)
当我这样做时,它不适合我:
a = Time.now.to_f
=> 1327018729.22437
b = (a + 4.days).to_f
=> 1327364329.22437
我相信这只是浮点数常见的小问题,你发现了一个小的精度错误。
这远不到一秒,即一天的.0000001。鉴于一天只有86,400秒,这通常不是问题,尽管将日期存储为日期并对其进行Ruby日期算术是一个很好的理由。