我正在编写一个程序,提示用户输入一家酒店的楼层总数、每一层的房间数以及被占用的房间数。最后要显示房间总数、占房间总数和占房间总数的百分比。我在显示被占房间的百分比方面有问题。我用了所有的整数。
这就是我所说的方程式:
roomsOccPercentage = (totalRoomsOccupied * 100) / totalRooms ;当我将程序提交给我的教授的Java运行程序时,它会显示:
65 % of the Rooms are occupied.但是我的教授提供的答案是66 %,所以程序不会接受我的文件。
有人知道我做错了什么吗?这是DecimalFormat错误吗?
编辑:这是整个代码
import java.util.Scanner;
import java.text.DecimalFormat;
public class hw7_1 {
public static void main(String[]args) {
Scanner keyboard = new Scanner(System.in);
DecimalFormat formatter = new DecimalFormat("#0");
int totalFloors;
int totalRooms = 0;
int numFloors;
int numRooms;
int roomsOccupied;
int totalRoomsOccupied = 0;
int roomsOccPercentage = 0;
//prompting users to input # of floors, no inputs below 1 floor
do {
System.out.println("Please enter the number of floors in the hotel: ");
numFloors = keyboard.nextInt();
if (numFloors < 1) {
System.out.println("You have entered an invalid number of floors. ");
}
}
while (numFloors < 1);
//for loops on how many rooms on each hotel floors
for ( int Floors = 1; Floors <= numFloors; Floors++) {
if (Floors == 13 ) {
continue;
}
do {
System.out.println("Please enter the number of rooms on floor #: " + Floors );
numRooms = keyboard.nextInt();
if (numRooms < 10) {
System.out.println("You have entered an invalid number of rooms. ");
}
} while (numRooms < 10);
System.out.println("Please enter the number of occupied rooms on floor #: " + Floors);
roomsOccupied = keyboard.nextInt();
totalRooms = totalRooms + numRooms;
totalRoomsOccupied = totalRoomsOccupied + roomsOccupied;
roomsOccPercentage = (totalRoomsOccupied * 100) / totalRooms ;
}
System.out.println("\nThe hotel has a total of " + totalRooms + " rooms.");
System.out.println(totalRoomsOccupied + " of the rooms are occupied.");
System.out.println(formatter.format(roomsOccPercentage) + "% of the rooms are occupied.");
}
}发布于 2013-11-18 07:13:17
你需要先把你的roomsOccPercentage变成双倍。
double roomsOccPercentage = 0.0;然后转换任一操作数,以避免整数除法。
roomsOccPercentage = (totalRoomsOccupied * 100.0) / totalRooms;您可以使用显式强制转换(如(double)totalRoomsOccupied ),也可以将100设置为100.0 (浮点数),从而使除法也成为浮点除法,而不是整数除法。
发布于 2013-11-18 06:56:19
请注意,java使用自己的规则,您需要遵守它们。决定你是否想要结果的地板或细胞,遵循下面给出的例子。
double roomsOccPercentage;
roomsOccPercentage =Math.ceil((double)5/4); //will be 2
roomsOccPercentage =Math.ceil(5/4); //will be 1
roomsOccPercentage =Math.floor((double)5/4); //will be 1我希望您现在可以找到java intresting。
发布于 2018-05-02 10:20:59
如果你更喜欢进入双数来进行整数除法,那么你可以这样做。如果你不愿意,你不需要,这只是有点棘手:
private static int divideRoundUp(int denominator, int divisor) {
return (denominator + divisor - 1) / divisor;
}我们试试看:
System.out.println(divideRoundUp(196, 3));
System.out.println(divideRoundUp(197, 3));
System.out.println(divideRoundUp(118, 2));
System.out.println(divideRoundUp(119, 2));这些指纹:
66
66
59
60如果没有余数,如118 / 2所示,则得到正常结果。在其他情况下,结果被舍入。如何处理负分母和/或除数是留给读者的练习。
在学校里,我们中的许多人都知道,65.5或更高的数字应该被舍入到66,而在65.0和65.5之间的数字应该被四舍五入到65。如果您希望这样做,则方法有一点不同:
private static int divideRoundHalfUp(int denominator, int divisor) {
return (denominator + divisor / 2) / divisor;
}示范:
System.out.println(divideRoundHalfUp(196, 3));
System.out.println(divideRoundHalfUp(197, 3));
System.out.println(divideRoundHalfUp(118, 2));
System.out.println(divideRoundHalfUp(119, 2));输出:
65
66
59
60https://stackoverflow.com/questions/20041650
复制相似问题