Member 14050706 Ответов: 2

В моем кодировании есть ошибка, из-за которой возможно преобразование с потерями из double в int


если (узел &ГТ;= 1 &&усилителя; блок &ЛТ;=200){
ставка = 0,218;
}
остальное, если (узел &ГТ;= 201 &&усилителя; блок &ЛТ;= 800){
ставка = 0,345;
}
еще {
ставка = 0,421;
}
количество = лошадиная сила*0.746*скорость*количество часов;
сумма = sc.nextInt();
System.out.println ("сумма к оплате =" + сумма);

Что я уже пробовал:

я попытался скомпилировать его, и он все еще имеет ошибку в моих расчетах. Вы не могли бы мне помочь?

Dave Kreskowiak

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

Manish K. Agarwal

Кроме того, вы пометили его как JavaScript, в то время как он выглядит как JAVA-код. Каковы типы данных о количестве, мощности, скорости и т. д. почему вы переписываете сумму с помощью следующего ввода с помощью sc.nextInt()

2 Ответов

Рейтинг:
2

OriginalGriff

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

amount = horsePower*0.746*rate*numberHours;

amount является целым числом, но результат выражения справа является двойным (поскольку наличие данных с плавающей запятой "0.746" и "rate"означает, что все это будет "повышено" до плавающей точки, даже если "horsePower" и "numberHours"целое - это не то число с плавающей точкой должно быть усечено до целого числа и ваш всегда получаем ноль в итоге).
Когда вы присваиваете двойник целому числу, вы теряете информацию, потому что вам нужно "выбросить" все, что находится справа от десятичной точки.

Компилятор хочет быть уверенным, что вы знаете, что делаете, поэтому он выдает вам ошибку, чтобы убедиться. Вы можете это сделать, но сначала вы должны бросить его, чтобы избежать ошибки:
amount = (int) (horsePower * 0.746 * rate * numberHours);

Но, как уже упоминалось, если вы немедленно перезаписываете значение с помощью пользовательского ввода, это довольно неуместно!
amount = horsePower*0.746*rate*numberHours;
amount = sc.nextInt();  // <---- Move or remove this!
System.out.println ("amount to pay is =" + amount);


Но сделайте себе одолжение и прекратите использовать "магические числа" - они совсем не делают код легким для понимания или обслуживания.


Рейтинг:
1

Patrice T

Цитата:
я попытался скомпилировать его, и он все еще имеет ошибку в моих расчетах.

Откуда вы знаете, что есть ошибка в расчетах?
amount = horsePower*0.746*rate*numberHours;         // 1) here you do some calcylation
amount = sc.nextInt();                              // 2) here you replace it with user input
System.out.println ("amount to pay is =" + amount); // 3) so, here you print the user input