2016-05-15 66 views
0

我正在阅读ThinkJava V6.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 + "%"); 
    } 
} 

感谢您的帮助和支持!

+0

尝试使用浮点代替任何双精度值,在它后面加上.00。即60 - > 60.00; 1 - > 1.00。 –

回答

1

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

percentage = (secondsSinceMidnight * 100)/60; 

对我来说看起来并不合适。它应该像

percentage = 100 * secondsSinceMidnight/totalSecondsInDay; 

totalSecondsInDay可以是secondsRemainingInDaysecondsSinceMidnight

+0

非常感谢你@Stefan!这完全帮助了我。出于某种原因,我无法将我的头围绕计算百分比。 – Nerkzor

0

我觉得你的代码有型铸造

的3线交换INT双重问题:

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

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

+0

我将所有变量都加倍,并使用@Stefan答案,它完全奏效,我能解决我的问题。谢谢。 – Nerkzor

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"); 
    } 
}