2012-01-20 45 views
1
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

它沒有我,當我做:

a = Time.now.to_f 
=> 1327018729.22437 
b = (a + 4.days).to_f 
=> 1327364329.22437 

我相信這僅僅是用浮漂共同小圓的問題,你發現了一個小精度誤差。

這遠遠小於一秒,即每天.0000001。鑑於一天只有86,400秒,這通常不是問題,儘管將日期存儲爲日期並對其進行Ruby日期算術是一個很好的理由。

+0

+1用於提示Ruby數據運算。 –

+0

紅寶石日期算術是什麼意思? (時間+1天) - 時間 => 86399.999999528 – Peder

+0

@Peder使用Date或DateTime而不是Time。 – Phrogz

3

這是一個浮點舍入問題。您的號碼存儲爲雙精度浮點數,精度爲53位。 2^53大約是9 * 10^15,給你15到16位十進制數字,具體取決於要表示的確切數量。

您可能會注意到,這兩個數字分別有16位和15位十進制數字。你只在最後一個地方。實際上,確切的存儲值既不是這兩個十進制數字,而是隻能用分數二進制精確表示的東西。

相關問題