2012-07-20 83 views
2

此代码:我应该担心这个DateTime数学会失去精确度吗?

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

( “DT” 和 “prevDt” 是包含的值,如 “7/20/2012上午07时30分〇〇秒” 和“7/20/2012 7日期时间瓦尔: 45:00 AM“)

...使ReSharper的警告我:

‘的精度比较浮点数平等运营商可能的损失,而舍入值’。

这是一个有效的警告,如果是的话,我将如何安抚它?我希望ReSharper更像Eclipse,它可以解决它所抱怨的问题。

无论如何,代码似乎工作正常,但我宁愿没有臭味的联合,如果这是一种代码味道。

回答

4

如果您确定您的时间戳完全在15分钟的边界而不是几毫秒的时间内,那么您的代码将正常工作。完全可以表示为int的值也可以精确地表示为双精度值。

如果你想尝试重写代码来避免的警告,你可能想试试这个:

if (prevDt.AddMinutes(15) == dt) 
4

不,这不是一个有效的警告,如果你的日期将永远是正好相隔15分钟后,没有秒或毫秒(或滴答)的差异,否则。

1

您可以使用Minutes以及所有其他属性(天/小时...)来比较您关心的部分(即忽略秒数)的TimeSpans。

否则,如果您的值可能包含秒/毫秒,则可能最好检查TotalMinutes是否不是太远,而不是完全匹配。