在 Ruby 2.0 / 1.9.3 中
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
缺少 using 的方式Marshal
,而不会丢失精度?
在 Ruby 2.0 / 1.9.3 中
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
缺少 using 的方式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
这些是转换为浮点数时损失的一小部分微秒。