类型转换int到双java?

时间:2016-09-26 17:47:05

标签: java

我正在练习调试,并且有一个我不确定的问题,它会问什么是错的,我该怎么做才能修复它我读了它的书章但没有足够具体。从书中粘贴:

int a = 26.4         ^ 编译时,这是消息:

Test.Java:8:可能会失去精确度 int a = 26.4;

必需:int 发现:双倍 1错误

我对错误的原因有一个很好的理解,因为double的优先级高于int,以及int如何不能存储double值。

我的问题是,有没有办法将转换变量a输入到double类型?或者是通过将from int更改为double来解决此问题的唯一方法吗?

感谢

5 个答案:

答案 0 :(得分:9)

您唯一的可能性是:

  • 如果您想将您的号码存储为整数,请将double输入int

    int a = (int)26.4   // so a will be 26
    

    (你显然会以这种方式失去精确度)

  • 将号码存储为double以保持精确度:

    double a = 26.4
    

答案 1 :(得分:4)

投射无济于事,请看下面的代码:

//int a = 26.4; // gives compile error
int a = (int) 26.4; // gives 26
double b = a; // gives 26.0
double c = (double) a; // also gives 26.0

答案 2 :(得分:0)

  

我对错误的原因有一个很好的理解,因为double的优先级高于int,以及int如何不能存储double值。

虽然"优先"不是正确的术语,你似乎在某个基本层面上理解了这个问题。当您将double投射到int时,您可能会丢失信息。在这种情况下,26.4将被截断为26

  

我的问题是,有没有办法将转换变量a输入到double类型?

类型转换将的类型从一种类型更改为另一种类型。您无法使用类型转换来更改变量的类型。将a声明为int后,它始终为int。你不能改变它。但是,a中存储的值可以在表达式中使用时转换为其他类型。

答案 3 :(得分:0)

有几种方法可以解决这个问题,哪种方法正确取决于应用程序。

第一个将左手类型保持为int,并将右侧投射到int

int a = (int) 26.4;

如果向零舍入,并且将值限制在Integer.MIN_VALUEInteger.MAX_VALUE范围内,则适用于您的应用程序,这是正确的。

接下来,您可以将左侧的类型更改为double

double a = 26.4;

如果可以使用a执行使用double的进一步操作,那么这是正确的。如果您必须具有int值,例如,为了传递给需要int的某个API,或者指定数组的长度或索引,这将不起作用。

或者,您可能需要使用Math API明确控制舍入和范围检查。例如,要舍入到 nearest 整数,如果int的值太大,则抛出异常:

int a = Math.toIntExact(Math.round(26.4));

答案 4 :(得分:0)

我认为以下代码可能会对您有所帮助。 在下面的代码中,它将double转换为整数变量,尽管对于这么简单的事情来说这是一个有点乏味的过程。

double a=26.4; int b =(int)Math.round(a);