日期:2014-05-20  浏览次数:20540 次

两个笔试题,请大家多帮忙
1.编写一个四舍五入的函数,要求可以保留到小数后面的任意一位(如3.1415927保留到小数点后第3位后得到3.142)
2.编写一个函数(不需要写出完整的类定义),计算两个日期(java.util.date)对象间相隔的天数,代码量不的超过10行。

------解决方案--------------------
public class TestRound
{

public static double fun(double d, int n)
{

for(int i=0; i <n;i++)
d*=10;
d = Math.round(d);
for(int i=0;i <n;i++)
d/=10;
return d;
}

public static void main(String[] args)
{
System.out.println(fun(3.1415926,3));
}
}
------解决方案--------------------
改造一下:

long fun(Date one, Date two)
{
long m = one.getTime()> two.getTime()?one.getTime()-two.getTime():two.getTime()-one.getTime();
System.out.println(m);
long d = m/(24l * 60 * 60 * 1000);
long x = m%(24l * 60 * 60 * 1000);
if (x != 0) d ++;
return d;
}

------解决方案--------------------
2

java.util.Date --- getTime()
返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数,

(date1.getTime()-date2.getTime())/(24*60*60*1000)

小数如何取整lz自己看着办。
1970 年 1 月 1以前的不知怎么办。



------解决方案--------------------
没遇到过,一会也看下
------解决方案--------------------
1. public String numberDeal(double num,int n){
NumberFormat nf=NumberFormat.getInstance();
nf.setMaximumFractionDigits(n);
nf.setMinimumFractionDigits(n);
return nf.format(num);
}
2. public long dateDivide(Date begin,Date end){
long begintime=begin.getTime();
long endtime=end.getTime();
long value=endtime-begintime;
if(value%(1000*60*60*24)==0)
return value/(1000*60*60*24);
else
return (value/(1000*60*60*24))+1;
}
------解决方案--------------------
问一下,日期对象那题,如果是date1 = 2007-1-1 9:00, date2 = 2007-1-1 10:00
返回的是1天还是0天呢?没理解错的话,应该是0天吧

我觉得应该把两个目标对象整理到 "天 ",再比较,代码如下:
public long checkDate(Date d1, Date d2){
long d1Fix = d1.getTime() / (1000 * 60 * 60 * 24L);
long d2Fix = d2.getTime() / (1000 * 60 * 60 * 24L);
return ( d1Fix > d2Fix ? d1Fix - d2Fix : d2Fix - d1Fix);
}


------解决方案--------------------
weijieut() 楼的方法取3位或其后几位都行,但唯独变成取2位后就不行了植就变成了3.1399999999999997 请高手帮解释下这是为什么?要怎么避免?
------解决方案--------------------
mark