2

このコード:

if (dt.Subtract(prevDt).TotalMinutes == 15)

(「dt」および「prevDt」は、「7/20/2012 7:30:00 AM」や「7/20/2012 7:45:00 AM」などの値を含む DateTime 変数です)

...ReSharper は次のように警告します。

「等値演算子による浮動小数点数の比較。値の丸め中に精度が失われる可能性があります。」

これは有効な警告ですか?もしそうなら、どうすれば緩和できますか? ReSharper がもう少し Eclipse に似ていたらいいのにと思います。

いずれにせよ、コードは正常に動作しているように見えますが、これがコードのにおいである場合は、関節を臭わせたくありません。

4

3 に答える 3

4

タイムスタンプが正確に 15 分の境界にあり、数ミリ秒ずれていないことが確実な場合、コードは正常に動作します。として正確に表現できる値は、int正確に double として表現することもできます。

警告を回避するためにコードを書き直したい場合は、次のようにしてみてください。

if (prevDt.AddMinutes(15) == dt)
于 2012-07-20T23:31:09.023 に答える
4

いいえ、日付が常に正確に 15 分間隔であり、それ以外の場合は秒またはミリ秒 (またはティック) の差がない場合、それは有効な警告ではありません。

于 2012-07-20T23:31:43.373 に答える
1

You may use Minutes with all other properties (Days/Hours...) to compare TimeSpans for portions you care about (i.e. ignore seconds).

Otherwise it may be better to check if TotalMinutes not too far off instead of exact match if your values are ever could contain seconds/milliseconds.

于 2012-07-20T23:45:04.723 に答える