首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:整数除法集合

Java:整数除法集合
EN

Stack Overflow用户
提问于 2013-11-18 06:40:45
回答 7查看 57.8K关注 0票数 4

我正在编写一个程序,提示用户输入一家酒店的楼层总数、每一层的房间数以及被占用的房间数。最后要显示房间总数、占房间总数和占房间总数的百分比。我在显示被占房间的百分比方面有问题。我用了所有的整数。

这就是我所说的方程式:

代码语言:javascript
复制
roomsOccPercentage = (totalRoomsOccupied * 100) / totalRooms ;

当我将程序提交给我的教授的Java运行程序时,它会显示:

代码语言:javascript
复制
65 % of the Rooms are occupied.

但是我的教授提供的答案是66 %,所以程序不会接受我的文件。

有人知道我做错了什么吗?这是DecimalFormat错误吗?

编辑:这是整个代码

代码语言:javascript
复制
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.");
    }
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2013-11-18 07:13:17

你需要先把你的roomsOccPercentage变成双倍。

代码语言:javascript
复制
double roomsOccPercentage = 0.0;

然后转换任一操作数,以避免整数除法。

代码语言:javascript
复制
roomsOccPercentage = (totalRoomsOccupied * 100.0) / totalRooms;

您可以使用显式强制转换(如(double)totalRoomsOccupied ),也可以将100设置为100.0 (浮点数),从而使除法也成为浮点除法,而不是整数除法。

票数 6
EN

Stack Overflow用户

发布于 2013-11-18 06:56:19

请注意,java使用自己的规则,您需要遵守它们。决定你是否想要结果的地板或细胞,遵循下面给出的例子。

代码语言:javascript
复制
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。

票数 19
EN

Stack Overflow用户

发布于 2018-05-02 10:20:59

如果你更喜欢进入双数来进行整数除法,那么你可以这样做。如果你不愿意,你不需要,这只是有点棘手:

代码语言:javascript
复制
private static int divideRoundUp(int denominator, int divisor) {
    return (denominator + divisor - 1) / divisor;
}

我们试试看:

代码语言:javascript
复制
    System.out.println(divideRoundUp(196, 3));
    System.out.println(divideRoundUp(197, 3));
    System.out.println(divideRoundUp(118, 2));
    System.out.println(divideRoundUp(119, 2));

这些指纹:

代码语言:javascript
复制
66
66
59
60

如果没有余数,如118 / 2所示,则得到正常结果。在其他情况下,结果被舍入。如何处理负分母和/或除数是留给读者的练习。

在学校里,我们中的许多人都知道,65.5或更高的数字应该被舍入到66,而在65.0和65.5之间的数字应该被四舍五入到65。如果您希望这样做,则方法有一点不同:

代码语言:javascript
复制
private static int divideRoundHalfUp(int denominator, int divisor) {
    return (denominator + divisor / 2) / divisor;
}

示范:

代码语言:javascript
复制
    System.out.println(divideRoundHalfUp(196, 3));
    System.out.println(divideRoundHalfUp(197, 3));
    System.out.println(divideRoundHalfUp(118, 2));
    System.out.println(divideRoundHalfUp(119, 2));

输出:

代码语言:javascript
复制
65
66
59
60
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20041650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档