为什么我的浮点变量保持整数?

时间:2011-09-22 20:35:09

标签: java variables floating-point numbers number-formatting

我一直在看这段代码已经有一段时间了,我似乎无法弄清楚可能是简单的错误是什么......简而言之,我在Java中有一个浮点变量似乎只是存储该值实际应该是什么的整数内容(整数)。当我将所有内容都塞进一个函数之前,我有一些代码工作,但在我重新考虑代码以使用更多函数之后,发生了这个错误。这是我到目前为止所得到的:

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小时。数字格式化工作正常,之前...所以我不知道是什么。

2 个答案:

答案 0 :(得分:4)

return (dtEnd.getTime() - dtStart.getTime()) / 3600000;,你除以一个整数,并使答案为整数。将其更改为3600000.0(或3600000f),您应该是金色的。

答案 1 :(得分:2)

dtEnd.getTime() - dtStart.getTime()) / 3600000

这是long和int的一个除法,所以结果本身将是一个long然后被转换为float,然后只保存计算的long值。要获得浮点结果,请先将其中一个操作数浮动,或者使用浮动文字,如3600000f。