当前位置: 首页 > 知识库问答 >
问题:

从double到int的转换可能有损,并且找不到符号[duplicate]

尉迟韬
2023-03-14
 Cube(b);
 ^

地点:课堂歌词

错误:不兼容类型:从double到int的转换可能有损

 return Math.pow (b, 3);
                   ^

2个错误

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

  public class Lyrics
  {
       public static void main(String []args)
       {
            int b;
            Scanner scan = new Scanner(System.in);
            System.out.println ("Enter a number: ");
            b = scan.nextInt();
            Cube(b);
       }
       public static int cube (int b)
       {
            return Math.pow (b, 3);
       }
}

共有1个答案

孔俊爽
2023-03-14

第一个问题是一个简单的错别字。Java区分大小写,因此cubecube的意思是不同的。解决方案:1)保持一致,和2)使用小写字母开头的名称作为方法名...根据Java风格指南。

第二个问题是由于math.pow的方法签名;请参阅Javadoc。它以double的形式返回结果。然后尝试将double作为int返回,这是一个有损的转换。

解决方案包括:

  return b * b * b;   // i.e. don't use `pow`.
  return (int) Math.pow(b, 3);

您看到的有损转换错误消息表明,对于b的值足够大,math.pow(b,3)的结果将太大,无法表示为int1。类型转换到位后,Java将把“太大”的浮点数转换为integer.max_value

第一种解决方案是更快、更简单的代码,但如果b太大,计算就会静默溢出,你会得到一个无厘头的答案。

更新-如果希望溢出始终被视为错误,则:

return Math.multiplyExact(b, Math.multiplyExact(b, b));

return Math.toIntExact((long) Math.pow(b, 3));

或上面的变体。

1-实际上,编译器不知道pow的语义,因此它不知道“...对于b的足够大的值...”。但是它知道如果方法调用确实返回了一个足够大的值,那么转换将是有损的。这就是为什么消息上写着“可能的有损转换”。

 类似资料:
  • 所以我最近写了以下代码: 当我尝试使用cmd运行它时,它一直显示以下内容: 有人能帮我解释一下我犯的错误吗?

  • 问题内容: 所以我最近写了下面的代码: 但是,它一直显示: 当我尝试使用cmd运行它时。 有人可以帮助并解释我所犯的错误吗?任何帮助表示赞赏:)。谢谢! 问题答案: 当您转换到,值的精度损失。例如,当您将4.8657(double)转换为int时,int值将为4.Primitive 不存储十进制数字,因此您将丢失0.8657。 在您的情况下,0.7是一个双精度值(除非提到float-0.7f,否则

  • 问题内容: 我已经定义了数组gx,数组arr为短型。但是为什么左边的运算可能会以int类型结束,而我必须将其转换为short?编译器错误可能是从int到short的有损转换。 这是我的代码。 } 那是因为所谓的拆箱吗?因此,这意味着我每次进行手术时都需要进行投射吗? 问题答案: 它不是开箱;这是“二进制数值提升”。 JLS的第5.6.2节规定: 当运算符将二进制数字提升应用于一对操作数时,每个操作

  • 我试图用java将十六进制数据写入我的串口,但是现在我不能将十六进制数据转换成字节数组。 以下是显示错误消息的代码: 这是写入串行端口的代码: 我能知道如何解决这个问题吗?目前我正在使用javax.comm插件。谢谢。

  • 目前,我正在使用链表,但是我有一个代码问题。下面的代码运行正常,但是当我试图用a添加一些节点来生成随机数时,它给了我这个错误。在为代码添加之前,运行添加,现在您可以在main中看到。也许我错过了什么。有人能帮我理解一下吗? 附言:评论部分是我试图“升级”的主要部分。

  • 我希望输入一个和另一个ex: 1和1000000000,现在我希望创建一个大小为1000000000的数组。然后在数组的每个索引处,存储int val,ex:。 当我尝试执行此操作时,Netbeans 会向我显示此行中的错误: “可能从long到int的有损转换”。这是我的密码:-