2015-05-01 6 views
0

Я новичок в программировании на 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 в качестве вывода с консоли. Какую ошибку я совершил?

+1

Что вы подразумеваете под словом «он дал результат, который не был нужен»?Была ли ошибка, был ли ответ другим, чем вы ожидали? – Kmeixner

+0

Двойной не требуется иметь десятичную точку при создании экземпляра :) Вы можете объявить 'double ballsPlayed = 100;' – CubeJockey

ответ

1

Вы должны Typecast ballsPlayed до double, потому что ballsPlayed является целым числом. Он возвращает целую часть (ballsPlayed % 6)/10. Таким образом, вы получили 0, кроме 0,4.

Попробуйте это,

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

Здесь вы получите 16 + 0,4 = 16,4

0

Выход ((ballsPlayed % 6)/10)) 0 не 0,4, потому что все значения здесь int. Вам нужно одно двойное значение для операции /, чтобы получить выход double. Для того, чтобы получить желаемое изменение выходного сигнала, как

((double)(ballsPlayed % 6)/10)) 

или

((ballsPlayed % 6)/10.0)) // Make 10 as double 
1

Просто измените ballsPlayed переменную из int в

double ballsPlayed = 100; 

этом устранит необходимость в нескольких забросов. Результат ((ballsPlayed% 6)/10)) будет 0 не 0,4, потому что компилятор имеет дело с значением int.

0

Ваша проблема начинается здесь ballsPlayed/6

Целое число, деленное на целое число дает целое - литье, что он удвоится слишком поздно, вы просто получите double представление, если усеченный результат от первого деления нацело

Если вы хотите получить дробный результат из этого, вам необходимо указать (или объявить) одно из чисел, участвующих в вычислении, в тип данных с плавающей точкой.

Это довольно много, что каждый еще сказал ....

0

ballsPlayed является ИНТ поэтому по умолчанию ballsPlayed/6 даст вам Int только так, что 16. Аналогично обстоит дело с ballsPlayed % 6, который даст Int и снова деление на 10 даст Int, которая приведет к 0.

Здесь вы хотите первое разделение быть ИНТ и второе деление следует рассматривать как двойной .. так просто поставить кастинг на второй операции, как

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

здесь шарыPlayed% 6 будет 4 и (double) ballsPlayed% 6) будет 4.0, double. Вы также можете выполнить литье после деления

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

 Смежные вопросы

  • Нет связанных вопросов^_^