1
在Ruby 2.0/1.9.3什麼是Ruby 1.8.7序列化時間而不失精度?
t = Time.now
t == Time.at(t.to_r)
# => true
顯然:
t = Time.now
t == Time.at(t.to_i)
# => false
不會削減它。
什麼是Ruby 1.8.7序列化方式Time
短缺使用Marshal
,而不會丟失精度?
在Ruby 2.0/1.9.3什麼是Ruby 1.8.7序列化時間而不失精度?
t = Time.now
t == Time.at(t.to_r)
# => true
顯然:
t = Time.now
t == Time.at(t.to_i)
# => false
不會削減它。
什麼是Ruby 1.8.7序列化方式Time
短缺使用Marshal
,而不會丟失精度?
雖然Time.to_r
在1.8.7不可用,Time.to_f
是:
t = Time.now
t == Time.at(t.to_f)
# => true
更新:由於原來你想要做它在1.8.7和2.0/1.9相同的方式。 3,我會指出to_f
仍然是最好的選擇。雖然
t == Time.at(t.to_f)
現在返回false
,只是因爲在1.9.3/2.0的Time對象具有比浮動甚至更高的精度。
t.to_f == Time.at(t.to_f).to_f
# => true
t - Time.at(t.to_f)
# => 8.09310302734375e-08
這些是在轉換爲浮點時丟失的微秒的小部分。
麻煩是time.to_f在1.8.7中工作,但在1.9.3中無法正常工作,所以你沒有一致的序列化格式 – 2013-04-08 06:24:04
@SamSaffron首先,你的問題並沒有讓你清楚你想要什麼在1.8.7 - 2.0.0之間工作的東西;你只是要求1.8.7的方式。你應該澄清一點。其次,它確實*工作*,因爲它給你提供了亞微秒的精度,這幾乎肯定是足夠好的。 – 2013-04-08 06:29:11
是啊to_f應該把它切開,只需要確保其他區域的代碼都知道它,結果鏈輪已經有一堆to_i隱藏在各種可能簡化事情的地方......對於上下文https:// github .COM/sstephenson /鏈輪/拉/ 428 – 2013-04-08 08:16:28