RSpec中日期时间末尾的分数部分代表什么?
问题解答
你猜的没错,721891/1048576这部分确实是时间的高精度纳秒级表示,和Mebibyte没有关联,只是分母刚好是2^20(1048576)而已。
具体细节:
- PostgreSQL的
timestamp with time zone(对应Rails里的datetime字段)支持微秒级精度,但Ruby的Time对象基于系统时钟,很多系统支持纳秒级精度,两者在交互时会做精度转换。 - Ruby内部用二进制分数(分母为2的幂)来存储纳秒级时间,避免十进制转换带来的精度损失。1秒等于109纳秒,而220(1048576)是Ruby处理时间时常用的精度基准,所以会把纳秒部分转换成以1048576为分母的分数形式展示。
- 举个实际换算:
721891/1048576秒 ≈ 0.688秒,对应约688476562纳秒。
另外你之前用变量存储2.hours.from_now来修复测试的做法是完全正确的——因为每次调用2.hours.from_now都会生成一个新的Time对象,哪怕两次调用间隔极短,纳秒部分也会有差异,直接用两次调用的结果做断言必然会失败。
内容的提问来源于stack exchange,提问作者Anes
相关产品推荐
相关产品推荐

