1

在 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,而不会丢失精度?

4

1 回答 1

3

虽然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

这些是转换为浮点数时损失的一小部分微秒。

于 2013-04-08T06:11:17.783 回答