我一直在看这段代码已经有一段时间了,我似乎无法弄清楚可能是简单的错误是什么......简而言之,我在Java中有一个浮点变量似乎只是存储该值实际应该是什么的整数内容(整数)。当我将所有内容都塞进一个函数之前,我有一些代码工作,但在我重新考虑代码以使用更多函数之后,发生了这个错误。这是我到目前为止所得到的:
public class ModifyTimeController extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
PopulateTimeIntervals(request.getWriter());
}
protected void PopulateTimeIntervals(PrintWriter writer) {
NumberFormat numberFormat = NumberFormat.getNumberInstance();
numberFormat.setMinimumFractionDigits(2);
numberFormat.setMaximumFractionDigits(2);
float workHours = (float)0.00;
...
/* Code that queries a database for TimeIntervals */
...
while(resultSet.next()) {
// I was told that this type of conversion is
// possible since Timestamp is an extension of Date
Date dtStart = resultSet.getTimestamp("dtStart");
Date dtEnd = resultSet.getTimestamp("dtEnd");
// Accumulates the hours worked in each time interval
workHours += CalculateWorkHours(dtStart, dtEnd);
}
// Should print out something like: 54.27
writer.println(numberFormat.format(workHours).toString());
}
protected float CalculateWorkHours(Date dtStart, Date dtEnd) {
// Divides the difference of the start and end times
// (in miliseconds) by 3600000 to convert to hours
return (dtEnd.getTime() - dtStart.getTime()) / 3600000;
}
}
这是漫长的一天,所以我可能只是错过了一些东西......但是我打算花费54.27
小时,而不是打印54
小时。数字格式化工作正常,之前...所以我不知道是什么。
答案 0 :(得分:4)
在return (dtEnd.getTime() - dtStart.getTime()) / 3600000;
,你除以一个整数,并使答案为整数。将其更改为3600000.0
(或3600000f
),您应该是金色的。
答案 1 :(得分:2)
dtEnd.getTime() - dtStart.getTime()) / 3600000
这是long和int的一个除法,所以结果本身将是一个long然后被转换为float,然后只保存计算的long值。要获得浮点结果,请先将其中一个操作数浮动,或者使用浮动文字,如3600000f。