Когда я ввожу целые числа, получаются нужные мне числа. Как только я ввожу десятичное число, оно отключается на пару%.
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%
Какие бывают типы testMark, midMark, finalMark, labMark и assignMark? Какие ценности они имеют при правильном результате? Какие значения они имеют при неверном результате?
@ user3738870 Десятичный формат.
@VGR Я отредактировал свой пост.
Райан, не могли бы вы отозвать свое согласие с моим ответом, чтобы я мог его удалить? Чарльз правильно диагностировал вашу проблему - вы просто ошибаетесь относительно того, каким должен быть результат предполагаемый.
Пожалуйста, отредактируйте свой вопрос и включите код, содержащий labMark =. Пока мы не узнаем, являются ли labMark (и другие переменные) целочисленными типами или типами с плавающей запятой, ответ не ясен.




Проблема заключалась в неправильном использовании типов. 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, что у вас есть.
Было бы лучше, если бы вы объяснили, почему ваши изменения имеют значение.
К сожалению, это не сработало, но все еще дает мне цифры со скидкой 2-3%.
Я заменил свой голос «против» на голос «за», потому что (i) вы дали объяснение и (ii) на самом деле ошибки не было, на что вы указали. OP просто ошибается относительно того, что выводит программа должен.
@ Райан, как ты, например, ждешь 85% на практические? (((labMark * 10) + (assignMark * 5)) / 2) = ((7,5 * 10) + (18 * 5)) / 2 = (75 + 90) / 2 = 82,5
Что такое
dfв вашем коде?