我有一个带有Postgres后端的Rails 5.2应用程序。当我从数据库中提取时间戳并将其转换为浮点数(to_f
)时,它应将以秒为单位的时间(以分数秒为单位)返回到微秒(因为postgres存储的最高精度是微秒)。相反,在我查看的大约25%的时间戳中,将时间戳转换为浮点型时,我得到了7个十进制数字(百分之一纳秒)。
irb(main):009:0> u.created_at.to_f
=> 1440127129.5120609
这是怎么回事?这不是1440127129.512060
还是1440127129.512061
吗?这个多余的十进制数字从哪里来?
答案 0 :(得分:1)
因为如您所见,Ruby的inspect
会以十进制格式打印出值,该值是从内部存储的格式(二进制)转换而来的,它的表示与其内部精度没有太大关系,并且绝对没有在导入到Ruby对象实例之前,要保证数据库中存储的值的精度。
要证明这一点(一部分),请在irb或rails控制台中尝试f=0.1000; p f
。它只显示“ 0.1”,而不显示“ “ 0.1000”。