Как создать уравнение на Java с десятичными знаками?

Когда я ввожу целые числа, получаются нужные мне числа. Как только я ввожу десятичное число, оно отключается на пару%.

double theory = (((testMark*10)+(midMark*5)+(finalMark*2.5))/3);
double practical = (((labMark*10)+(assignMark*5))/2);
double finalAvg = ((practical+theory)/2);

System.out.println("\nTheory: "+df.format(theory)+"%");
System.out.println("\nPractical: "+df.format(practical)+"%");
System.out.println("\nFinal: "+df.format(finalAvg)+"%");

Я хочу посчитать все оценки вместе, но некоторые из них выходят из 10,20,40 и т. д. Вот почему я умножил это число до 100.

Спасибо.

Редактировать:

Пример входов и ответов:

Введите свою оценку лаборатории из 10: 7,5

Введите свою оценку викторины / теста из 10: 5

Введите свою оценку задания из 20:18

Введите свою среднесрочную оценку из 20:15

Введите свою оценку за итоговый экзамен из 40:32

Теоретическая оценка: 74,29%

Практическая оценка: 85%

Итоговая оценка: 77,5%

Моя программа выводит:

Теория: 68,33%

Практические: 82,5%

Финал: 75,42%

Что такое df в вашем коде?

user3738870 04.10.2018 21:48

Какие бывают типы testMark, midMark, finalMark, labMark и assignMark? Какие ценности они имеют при правильном результате? Какие значения они имеют при неверном результате?

VGR 04.10.2018 21:58

@ user3738870 Десятичный формат.

Ryan 04.10.2018 21:58

@VGR Я отредактировал свой пост.

Ryan 04.10.2018 22:04

Райан, не могли бы вы отозвать свое согласие с моим ответом, чтобы я мог его удалить? Чарльз правильно диагностировал вашу проблему - вы просто ошибаетесь относительно того, каким должен быть результат предполагаемый.

Dawood ibn Kareem 04.10.2018 22:36

Пожалуйста, отредактируйте свой вопрос и включите код, содержащий labMark =. Пока мы не узнаем, являются ли labMark (и другие переменные) целочисленными типами или типами с плавающей запятой, ответ не ясен.

VGR 04.10.2018 22:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
6
176
1

Ответы 1

Проблема заключалась в неправильном использовании типов. java int / int все равно даст вам int. в этом случае 1/2 = 0 ... но 1 / 2,0 = 0,5. это потому, что один из операндов является двойным, поэтому другое число также приводится и возвращается двойное значение.

double theory = (((testMark*10)+(midMark*5)+(finalMark*2.5))/3.0);
double practical = (((labMark*10)+(assignMark*5))/2.0);
double finalAvg = ((practical+theory)/2.0);

Вы уверены, что формула, которую вы используете, верна? Пример также использует ту же формулу?

если вы вставите номер и наберете его в калькуляторе (((5,0 * 10,0) + (15,0 * 5,0) + (32,0 * 2,5)) / 3) = 68,33333, что у вас есть.

Было бы лучше, если бы вы объяснили, почему ваши изменения имеют значение.

VGR 04.10.2018 21:57

К сожалению, это не сработало, но все еще дает мне цифры со скидкой 2-3%.

Ryan 04.10.2018 21:57

Я заменил свой голос «против» на голос «за», потому что (i) вы дали объяснение и (ii) на самом деле ошибки не было, на что вы указали. OP просто ошибается относительно того, что выводит программа должен.

Dawood ibn Kareem 04.10.2018 22:35

@ Райан, как ты, например, ждешь 85% на практические? (((labMark * 10) + (assignMark * 5)) / 2) = ((7,5 * 10) + (18 * 5)) / 2 = (75 + 90) / 2 = 82,5

Jamie 04.10.2018 22:53

Другие вопросы по теме