繁体   English   中英

为什么我的浮动变量保存整数?

[英]Why is my Float Variable Holding Whole Numbers?

我已经看了一会儿这段代码了,我似乎无法弄清楚到底是什么简单的错误……总之,我在Java中有一个float变量,似乎只存储整数内容。 (整数)值的实际值。 在将所有内容塞到一个函数中之前,我已经使用了这段代码,但是在我重构代码以使用更多函数之后,就会发生此错误。 到目前为止,这是我得到的:

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小时。 在...之前,数字格式可以正常工作,所以我不知道怎么回事。

return (dtEnd.getTime() - dtStart.getTime()) / 3600000; 您是用整数除以整数,然后将答案设为整数。 将其更改为3600000.0 (或3600000f ),您应该会很3600000f

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

这是long和int的除法,因此结果本身将是long,然后将其强制转换为float,然后只保存计算的long值。 要获得浮点结果,请先将其中一个操作数强制转换为浮点数,或改用像3600000f这样的浮点文字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM