我正在阅读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 + "%");
}
}
感谢您的帮助和支持!
答案 0 :(得分:1)
请检查计算已经过去一天的百分比的公式。
percentage = (secondsSinceMidnight * 100) / 60;
对我来说似乎不对。它应该像
percentage = 100 * secondsSinceMidnight / totalSecondsInDay;
totalSecondsInDay
可以是secondsRemainingInDay
和secondsSinceMidnight
答案 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");
}
}