【发布时间】:2013-09-13 11:30:16
【问题描述】:
time = Time.now
fvalue = time.to_f
return time == Time.at(fvalue)
这里有人可以解释为什么上面的表达式返回 false。如何从浮点数创建一个与原始时间变量匹配的新时间对象?
谢谢
【问题讨论】:
标签: ruby time comparison
time = Time.now
fvalue = time.to_f
return time == Time.at(fvalue)
这里有人可以解释为什么上面的表达式返回 false。如何从浮点数创建一个与原始时间变量匹配的新时间对象?
谢谢
【问题讨论】:
标签: ruby time comparison
IEEE 754 double(由to_f 返回)不够准确,无法表示准确时间。
t1 = Time.now
f1 = t1.to_f
t2 = Time.at(f1)
# they look the same
t1.inspect #=> '2013-09-09 23:46:08 +0200'
t2.inspect #=> '2013-09-09 23:46:08 +0200'
# but double does not have enough precision to be accurate to the nanosecond
t1.nsec #=> 827938306
t2.nsec #=> 827938318
# ^^
# so they are different
t1 == t2 #=> false
执行以下操作,以保持准确的时间:
t1 = Time.now
r1 = t1.to_r # value of time as a rational number
t2 = Time.at(r1)
t1 == t2 #=> true
来自Time.to_r的引用:
此方法旨在用于获得准确的值 表示自纪元以来的纳秒。你可以使用这个方法 将时间转换为另一个纪元。
【讨论】: