5

なぜ以下が違うのですか?

Time.now.end_of_day      == Time.now.end_of_day - 0.days      # false
Time.now.end_of_day.to_s == Time.now.end_of_day - 0.days.to_s # true
4

3 に答える 3

4

ナノ秒数が異なるため:

ruby-1.9.2-p180 :014 > (Time.now.end_of_day - 0.days).nsec
 => 999999000 
ruby-1.9.2-p180 :015 > Time.now.end_of_day.nsec
 => 999999998 
于 2012-05-02T00:07:21.947 に答える
3

ミーシャが言ったように、時間はナノ秒単位で異なります。Railsでこれを行うための回避策と修正に関する記事、特にあなたが行っているようなテストのための記事です。

与えられた一見最も簡単なアプローチは、 を追加して時間を秒に丸めること.to_iですが、他の代替手段があります。

于 2012-05-02T00:09:28.497 に答える
2

ミシャの答えを拡張するには:

Timeオブジェクトのドキュメントから:「すべての時間に端数がある可能性があります。時間を互いに比較するときは、この事実に注意してください。表示されたときに明らかに等しい時間は、比較したときに異なる場合があります。」

したがって、最初の計算では、ナノ秒レベルで異なる2つのTimeオブジェクトを比較しますが、2番目の計算では、両方のTimeオブジェクトをStringsに変換します。これは、ナノ秒を無視し、両方のString表現が一致するためtrueを返します。

于 2012-05-02T00:10:22.617 に答える