为什么每天添加一天会改变秒的小数部分?

时间:2012-01-20 00:14:35

标签: ruby datetime date datetime-format seconds

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

2 个答案:

答案 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日期算术是一个很好的理由。