【问题标题】:Don't know how to fix: error: incompatible types: possible lossy conversion from double to int不知道如何解决:错误:不兼容的类型:可能有损从 double 到 int 的转换
【发布时间】:2020-09-11 20:58:55
【问题描述】:

我不知道第 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)");
  

} }

【问题讨论】:

  • 第 34 行是什么?
  • 有问题的行是cansNeeded = paintNeeded / gallonsPerCan;。您正在划分两个双精度,但将结果分配给一个 int。您应该将该除法的结果转换为 int,可能需要经过一些舍入操作。

标签: java


【解决方案1】:

整数没有小数点,这与双精度数不同。

您只能将整数分配给 int,而不是 double 等。

在您的情况下,您可能希望将 cansNeeded 定义为双精度(每个其他变量都是双精度)。它应该是这样的:

double cansNeeded = paintNeeded / gallonsPerCan

然后您可以相应地处理结果(向上舍入、向下舍入等)。这更准确。

要四舍五入,请使用Math.ceil(cansNeeded)。要向下舍入,请使用Math.floor(cansNeeded)

【讨论】:

    【解决方案2】:

    双精度数相除的结果是双精度数,不能赋值给 int。在您的情况下,您可能希望使用Math.ceil,然后转换为int

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-21
      • 1970-01-01
      相关资源
      最近更新 更多