双重操作的错误输出
Wrong output from an double operation
我是 Java 编程的初学者。当我编写一个简单的控制台应用程序时,它给出了一个不是我想要的输出。我的代码是:
class myClass{
public static void main(String[] args) {
int ballsPlayed = 100;
double o = (double)(( ballsPlayed / 6 ) + ( ( ballsPlayed % 6) / 10 ));
System.out.println(o);
}
}
( ( ballsPlayed % 6) / 10)
应该是 0.4,因为 100/6 的余数是 4,而 4/10 必须给出 0.4。那么变量 'o' 必须给出 16.4(16+0.4)。但是我从控制台得到 16.0 作为输出。我犯了什么错误?
您必须将 ballsPlayed
强制转换为 double
,因为 ballsPlayed
是一个整数。它 returns (ballsPlayed % 6) / 10
的整数部分。因此你得到 0 除了 0.4.
试试这个,
double o = (double)(( ballsPlayed / 6 ) + ((double) ( ballsPlayed % 6) / 10 ));
在这里你会得到 16 + 0.4 = 16.4
(( ballsPlayed % 6) / 10 ))
的输出是 0 而不是 0.4,因为这里的所有值都是 int
。 /
操作需要一个双精度值才能获得 double
输出。要获得所需的输出更改,如
( (double)( ballsPlayed % 6) / 10 ))
或
(( ballsPlayed % 6) / 10.0 )) // Make 10 as double
只需将 ballsPlayed
变量从 int
更改为
double ballsPlayed = 100;
这将避免多次转换的需要。 (( ballsPlayed % 6) / 10 )) 的输出将是 0 而不是 0.4,因为编译器正在处理一个 int 值。
你的问题从这里开始
ballsPlayed / 6
一个整数除以一个整数得到一个整数 - 将其转换为双精度为时已晚,如果第一个整数除法的截断结果
,您将得到一个 double
表示
如果你想从中得到小数结果,你需要将计算中涉及的数字之一转换(或声明)为浮点数据类型。
这几乎是每个人都说过的....
ballsPlayed
是 int,所以默认情况下 ballsPlayed/6
只会给你 int,所以就是 16。类似的是 ballsPlayed % 6
的情况,它将给出 int 并且再次除以 10 将给出结果为 0.
的 int
这里你希望第一个除法是int,第二个除法是double..所以只需要将第二个操作的转换为
double o = (( ballsPlayed / 6 ) + ( ( (double)ballsPlayed % 6) / 10 ));
此处 ballsPlayed % 6 将为 4,(double)ballsPlayed % 6) 将为 4.0,双倍。您也可以在除法后进行铸造
double o = (( ballsPlayed / 6 ) + ( (double)( ballsPlayed % 6) / 10 ));
我是 Java 编程的初学者。当我编写一个简单的控制台应用程序时,它给出了一个不是我想要的输出。我的代码是:
class myClass{
public static void main(String[] args) {
int ballsPlayed = 100;
double o = (double)(( ballsPlayed / 6 ) + ( ( ballsPlayed % 6) / 10 ));
System.out.println(o);
}
}
( ( ballsPlayed % 6) / 10)
应该是 0.4,因为 100/6 的余数是 4,而 4/10 必须给出 0.4。那么变量 'o' 必须给出 16.4(16+0.4)。但是我从控制台得到 16.0 作为输出。我犯了什么错误?
您必须将 ballsPlayed
强制转换为 double
,因为 ballsPlayed
是一个整数。它 returns (ballsPlayed % 6) / 10
的整数部分。因此你得到 0 除了 0.4.
试试这个,
double o = (double)(( ballsPlayed / 6 ) + ((double) ( ballsPlayed % 6) / 10 ));
在这里你会得到 16 + 0.4 = 16.4
(( ballsPlayed % 6) / 10 ))
的输出是 0 而不是 0.4,因为这里的所有值都是 int
。 /
操作需要一个双精度值才能获得 double
输出。要获得所需的输出更改,如
( (double)( ballsPlayed % 6) / 10 ))
或
(( ballsPlayed % 6) / 10.0 )) // Make 10 as double
只需将 ballsPlayed
变量从 int
更改为
double ballsPlayed = 100;
这将避免多次转换的需要。 (( ballsPlayed % 6) / 10 )) 的输出将是 0 而不是 0.4,因为编译器正在处理一个 int 值。
你的问题从这里开始
ballsPlayed / 6
一个整数除以一个整数得到一个整数 - 将其转换为双精度为时已晚,如果第一个整数除法的截断结果
,您将得到一个double
表示
如果你想从中得到小数结果,你需要将计算中涉及的数字之一转换(或声明)为浮点数据类型。
这几乎是每个人都说过的....
ballsPlayed
是 int,所以默认情况下 ballsPlayed/6
只会给你 int,所以就是 16。类似的是 ballsPlayed % 6
的情况,它将给出 int 并且再次除以 10 将给出结果为 0.
这里你希望第一个除法是int,第二个除法是double..所以只需要将第二个操作的转换为
double o = (( ballsPlayed / 6 ) + ( ( (double)ballsPlayed % 6) / 10 ));
此处 ballsPlayed % 6 将为 4,(double)ballsPlayed % 6) 将为 4.0,双倍。您也可以在除法后进行铸造
double o = (( ballsPlayed / 6 ) + ( (double)( ballsPlayed % 6) / 10 ));