计算并显示通过的时间百分比

时间:2016-05-15 19:52:23

标签: java

我正在阅读ThinkJava版本6.1.0(最新版本)和第2章练习2.3,我停留在#5上,询问“计算并显示已经过去的那一天的百分比。你可能会遇到问题在使用整数计算百分比时,请考虑使用浮点数。“

我试图获得百分比,但我没有得到正确的结果。

我已经完成了前4个问题。以下是我到目前为止的情况:

public class Date {

    public static void main(String[] args) {

        int hour = 13, minute = 58, second = 45;
        double percentage;
        double secondsSinceMidnight = second + (minute * 60) + (hour * 3600);
        double secondsRemainingInDay = (60-second) + ((60-1-minute)*60) + (24-1-hour)*3600;

        percentage = (secondsSinceMidnight * 100) / 60;

        System.out.println("Number of seconds since midnight:");
        System.out.println(secondsSinceMidnight);

        System.out.println("Number of seconds remaining in the day:");
        System.out.println(secondsRemainingInDay);

        System.out.println("Percentage of the day past:");
        System.out.println(percentage + "%");
    }
}

感谢您的帮助和支持!

3 个答案:

答案 0 :(得分:1)

请检查计算已经过去一天的百分比的公式。

    percentage = (secondsSinceMidnight * 100) / 60;

对我来说似乎不对。它应该像

    percentage =  100 * secondsSinceMidnight  / totalSecondsInDay;

totalSecondsInDay可以是secondsRemainingInDaysecondsSinceMidnight

的总和

答案 1 :(得分:0)

我认为您的代码存在类型转换问题

在第3行交换int with double:

double hour = 13, minute = 58, second = 45;

或常数有问题,以这种方式写数字:60.0而不是60

答案 2 :(得分:0)

这是一个硬编码时间的例子。这显然是在军事时间,所以记住这一点。

public class Time 
{
    public static void main(String[] args) {
        int startHour = 12;         //when you start editing program
        int startMinute = 00;
        int startSecond = 00;
        System.out.print("Number of seconds since midnight: ");
        startMinute = (startHour * 60 + startMinute );
        startSecond = (startMinute * 60 + startSecond);
        System.out.print(startSecond);
        System.out.println(" seconds");

        int secondInADay = 86400;    //number of seconds in a day   
        System.out.print ("Seconds remaining in the day: ");
        System.out.println (secondInADay - startSecond);

        System.out.print("Percent of the day that has passed: ");
        double startSeconds = 43200;    //number of seconds that have passed in a day at start of editing program
        System.out.println(startSeconds * 100 / 86400);

        int endHour = 16;               //time when finished editing program
        int endMinute = 00;
        int endSecond = 00;

        System.out.print ("Difference = ");     //difference in time from start to finish
        endMinute = (endHour * 60 + endMinute );
        endSecond = (endMinute * 60 + endSecond);
        System.out.print (endSecond - startSecond);
        System.out.print (" seconds");
    }
}