Не знаю, как исправить: ошибка: несовместимые типы: возможное преобразование с потерями из double в int

#java

#java

Вопрос:

Я не могу понять, что не так в строке 34, и мне нужна помощь в ее исправлении. Я не знаю, неправильно ли я что-то ввел или мне нужно что-то преобразовать.

 import java.util.Scanner;
import java.lang.Math;     

public class PaintEstimator {
public static void main(String[] args) {
  Scanner scnr = new Scanner(System.in);
  double wallHeight;
  double wallWidth;
  double wallArea;
  
  System.out.println("Enter wall height (feet): ");
  wallHeight = scnr.nextDouble();
  System.out.println(wallHeight);
  wallWidth = scnr.nextDouble();                     
  System.out.println("Enter wall width (feet): ");
  System.out.println(wallWidth);
  
  
  wallArea = wallHeight * wallWidth;                        
  System.out.println("Wall area: "   (wallArea)   " square feet");     
  
  double paintNeeded;
  int cansNeeded;
  final double squareFeetPerGallons;
  final double gallonsPerCan;
  
  squareFeetPerGallons = 350.0;
  gallonsPerCan = 1.0;
  
  System.out.print("Paint needed: ");
  paintNeeded = wallArea / squareFeetPerGallons;
  System.out.print(paintNeeded);
  System.out.println(" gallons");
  cansNeeded = paintNeeded / gallonsPerCan;
  System.out.print("Cans needed: ");
  System.out.print(cansNeeded);
  System.out.println(" can(s)");
  
  

}
}

Комментарии:

1. Что за строка 34?

2. Проблемная строка cansNeeded = paintNeeded / gallonsPerCan; . Вы делите два double, но присваиваете результат int. Вы должны преобразовать результат этого деления в int, возможно, после некоторой операции округления.

Ответ №1:

Целые числа не имеют десятичных точек, в отличие от двойных, которые имеют.

Вы можете присвоить целое число только int, а не double и т.д.,.

В вашем случае вы, вероятно, захотите определить cansNeeded как double (каждая другая переменная является double). Это должно выглядеть примерно так:

 double cansNeeded = paintNeeded / gallonsPerCan
  

Затем вы можете соответствующим образом обработать результат (округлить вверх, уменьшить и т.д.). Это более точно.

Для округления используйте Math.ceil(cansNeeded) . Для округления в меньшую сторону используйте Math.floor(cansNeeded) .

Ответ №2:

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

 cansNeeded = (int) Math.ceil(paintNeeded / gallonsPerCan);