`

一个很丑陋的数值计算问题

    博客分类:
  • java
阅读更多

        前两天我的工程出现的一个问题,出现这个问题后我才知道自己的java基础是多么的烂,实在要为自己找个一点好听点借口就是多么的粗心.唉,感概一下,这是一个普通到不能再普通的问题了,进入正题……一块来看看这个低级失误...   有意思的是和Mian的DefaultIoFuture中的问题很像..    

        在项目中有这样一个需求:把一个新闻对象缓存到内存中,但是要求在每天清理掉过期的新闻对象。比如一个新闻我要求保存30天,那么在新闻的发布日期超过30天的时候,这个新闻会被删除掉。这个一个普通的不能再普通的需求,看看如下新闻对象.

 

public class News {
	private long newsDateTime;
	
	public long getNewsDateTime() {
		 return newsDateTime;
	}
	
	public void setNewsDateTime(long dateTime) {
		this.newsDateTime = dateTime;
	}
	
	...
}

 

OK,接下来看看如何来判断这个新闻是否超过指定的时间.

long nowTime = System.currentTimeMillis();
long newsTime = news.getNewsDateTime();
		
int activeDays = Config.getActiveDays(); //从配置文件中获取需要保存多少天
long interval = activeDays * 24 * 60 * 60 * 1000; //计算出间隔时间
		
long t = nowTime - newsTime;
if(t > interval) {
	System.out.println(news.getNewsID() + "可以被删除掉了.");
}

 代码很简单,用当前时间减去新闻发布时候的时间得出结果后和配置文件中配置的需要保存多少天的时间进行比较,如果大于这个天数那么就删除新闻,否则什么也不做.

 

这段代码有个很大的问题,也很隐蔽.这也是我为什么把他贴出来的原因.如果配置文件是10天,20天,那么代码可以正常工作.如果是30天,几乎所有的新闻都会被删除掉.原因就在于activeDays * 24 * 60 * 60 * 1000这一句上,仔细想想,如果是整形那么30×24×60×60×1000必然变成负数了,所以后面的t > interval也就成立了.

 

以后这种运算千万要注意了.基础也罢粗心也罢,搞的人难堪至极...

分享到:
评论

相关推荐

    matlab开发-UglyDataApp

    MATLAB,全称Matrix Laboratory,是一款强大的数值计算与可视化软件,广泛应用于科学计算、工程设计和数据分析等领域。UglyDataApp作为MATLAB环境下的一个应用程序,它充分利用了MATLAB的计算能力,为用户提供了友好...

    Python练习题 (2).docx

    4. 列表、元组和字符串的索引从0开始,最后一个元素的索引是-1,所以最后一个元素的下一个索引不存在,会引发错误。 【计算和控制流(一)】 1. `break`语句用于立即退出当前循环,`continue`语句则跳过当前循环的...

    python简明教程

    - **Flask**:一个轻量级的Web应用框架,易于上手。 - **Django**:功能强大且全面的Web框架,适合大型项目开发。 #### 七、数据分析与科学计算 - **NumPy**:用于数值计算的基础库。 - **Pandas**:提供高性能的...

    greed-kata

    开发期间(仅适用于面试审稿人)我想到的问题在看到规则之后但在示例之前的第一个问题是三重规则是否仅适用于连续的相同数字。 (如果是的话,我肯定不会玩这个游戏...) 使用字典还是6个int变量来保存人脸计数? ...

    Python练习题(1).docx

    列表、元组和字符串索引:在Python中,最后一个元素的下标是-1,可以使用负数索引来访问。 9-10. 列表、元组和字符串操作:这部分未提供具体代码,无法直接给出答案,但涉及列表、元组的切片、组合以及字符串的...

Global site tag (gtag.js) - Google Analytics