双重操作的错误输出

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)b​​allsPlayed % 6) 将为 4.0,双倍。您也可以在除法后进行铸造

double o = (( ballsPlayed / 6 )  + ( (double)( ballsPlayed % 6) / 10 ));