【发布时间】:2015-09-25 14:10:19
【问题描述】:
今天我尝试用 Java 编写一个简单的程序,它可以给我输入的数字的平均值。
问题是,如果我使用 int added(如下所示),我得到的答案与使用 double added 时的答案不同。
代码:
public class Main {
public static void main(String[] args) {
int amount;
int number;
int added = 0;
double average;
Scanner input = new Scanner(System.in);
System.out.println("This program calculates the average of the numbers entered by you.");
System.out.println("How many numbers do you want to enter?");
amount = input.nextInt();
for(int i=1; i<=amount; i++){
System.out.println("Enter a number:");
number = input.nextInt();
added = added + number;
}
average = added/amount;
System.out.println("The average of the numbers entered is: " + average);
}
}
结果:
This program calculates the average of the numbers entered by you.
How many numbers do you want to enter?
6
Enter a number:
3
Enter a number:
2
Enter a number:
4
Enter a number:
1
Enter a number:
6
Enter a number:
5
The average of the numbers entered is: 3.0
当我使用 double 时,我得到了正确的答案:
public class Main {
public static void main(String[] args) {
int amount;
int number;
double added = 0;
double average;
Scanner input = new Scanner(System.in);
System.out.println("This program calculates the average of the numbers entered by you.");
System.out.println("How many numbers do you want to enter?");
amount = input.nextInt();
for(int i=1; i<=amount; i++){
System.out.println("Enter a number:");
number = input.nextInt();
added = added + number;
}
average = added/amount;
System.out.println("The average of the numbers entered is: " + average);
}
}
当我使用 double added 而不是 int added 时的结果:
This program calculates the average of the numbers entered by you.
How many numbers do you want to enter?
6
Enter a number:
3
Enter a number:
2
Enter a number:
4
Enter a number:
1
Enter a number:
6
Enter a number:
5
The average of the numbers entered is: 3.5
为什么会发生这种情况,我应该怎么做才能避免它? 对我来说,add 似乎是一个 int,因为我不加小数,但我加了整数。
提前谢谢你。
【问题讨论】:
-
整数除法的结果是
int,没有小数部分。 -
右:int x = y/z 将在所有 z > y 都是整数时返回 x = 0。在 Java、C、C++、C# 等中是正确的。
-
所以
(int) 5/2 will be 2(int 实际上是 2.5 但 .5 被忽略)(double) 5/2 will be 2.5(double 能够存储它)
标签: java eclipse int double average