为什么值/ 100返回0?

时间:2014-08-24 08:03:09

标签: java math

我有以下代码:

int aGrade=7;
int asteriskCount=((aGrade/100)*50);
System.out.print(asteriskCount);

for(int i=0; i<=asteriskCount; i++)
{
    System.out.print("*");
}

asteriskCount的计算结果为零,因此代码只打印一个星号,而不是我预期的四个星号。为什么呢?

5 个答案:

答案 0 :(得分:3)

这是由于整数除法。通过使用100.0而不是100的浮动值,使用浮点执行除法。

尝试

int asteriskCount = (int)((aGrade/100.0)*50);
                                  ^^^^^

答案 1 :(得分:2)

您的代码存在一些问题:

整数除法:
由于您使用的是整数,因此计算中实际发生的是:

(aGrade/100) -> 0
((aGrade/100) * 50) = (0 * 50) -> 0

如何解决:
您可以使用浮点计算(如其他答案中所述),也可以简单地颠倒操作顺序:

int asteriskCount = ((aGrade * 50) / 100);

这将解决问题,并将导致3而不是0。

缺乏四舍五入:
如上所述,即使您更正了计算,您仍然会得到星号3而不是4.原因是您没有将结果四舍五入。

如何解决:
你可以通过在除法之前加上你除以的一半量来实现整数除法的舍入。为什么这样做?因为它模拟了你正常处理事物的方式,即在分割后增加0.5并修剪剩余部分 在此示例中,计算应如下所示:

int roundUp = (100 / 2);
int asteriskCount = ((aGrade * 50 + roundUp) / 100);

你有它,现在你得到4!

迭代长度不正确:
还有另一个问题会导致您打印出错误的星号,也就是说您的迭代会打印一个星号太多。这就是为什么你现在看到一个星号而不是一个星号(请记住原始计算结果是0)。
当你想要迭代一定次数时,请记住,如果你从0开始,你应该在达到数字之前完成,否则,你需要迭代一次太多。

如何解决:
迭代应该是:

for (int i=0; i<asteriskCount; i++) {
    System.out.print("*");
}
祝你好运!

答案 2 :(得分:1)

你可以试试这个:

Double asteriskCount= Double((aGrade/100.0)*50);

问题是整数/整数除法是int。您需要将其强制转换为Double并将其存储为double。

但是如果你想将它存储在一个int中,那么将它转换为int。

int asteriskCount = (int)((aGrade/100.0)*50);

答案 3 :(得分:1)

是的,这是由于整数划分,就像他说的那样。

当你将5除以2时,答案是2.5。但是,如果使用整数来存储答案,则它将显示为2。

同样,当你将7除以100时,你的答案是0.07,因此存储的整数值只是0。

试试这个:

double aGrade = 7;
int asteriskCount = (int)((aGrade/100)*50);

答案 4 :(得分:0)

当您进行这样的除法时aGrade/100 = 7/100 Java只存储结果的整数部分。即7/100 = 0。因此,将此结果乘以后缀并不重要,答案将始终为零。这称为整数除法。如果您希望此计算返回0.07,则必须使用double进行除法。即:(aGrade/100.0)*50,然后当您乘以50时,要使用for循环中的结果,请将第二个计算转换为int

int asteriskCount = (int)((aGrade/100.0)*50);