为什么我需要从double转换为int,反之亦然?

时间:2019-03-03 21:18:26

标签: java variables casting

假设我有一个双精度和一个整数。

double x = 5;
int y = x;

执行此操作时,它会引发错误,因为我需要像这样将其从double显式转换为int,

int y = (int) x;

使其正常工作。但是当我这样做

int x = 5;
double y = x;

不会引发任何错误,并且可以正常工作。必须从double显式转换为int而不是反之亦然吗?

4 个答案:

答案 0 :(得分:2)

Double比int更宽泛。 According to specification您可以按以下顺序分配值:

byte -> short -> int -> long -> float -> double

主要思想:

  

加宽基元转换不会丢失有关数值总体大小的信息。

但是:

  

缩小的原始转换可能会丢失有关数值总大小的信息,并且还会丢失精度和范围。

答案 1 :(得分:1)

因为当您将整数转换为双精度数时,它的含义是1或1.0。但是,当您从double转换为int时,说的是1.8或1是不一样的,那么您必须显式地对其进行转换。

答案 2 :(得分:1)

除了失去准确性外,它们的大小也不同。

想把衣柜从卡车里塞进汽车后备箱里。那是行不通的,但是将箱子从汽车后备箱拿到卡车上就可以了。

int是2到4个字节,而double是8个字节,如此处TutorialsPoint

所述

答案 3 :(得分:0)

根据Java Documentation

  • int使用 32位存储。它表示 -2 ^ 31 与最大值 2 ^ 31-1 之间的 integers
  • 使用 64位存储一个双精度型。它表示 2 ^ -1074 (2-2 ^ -52)·2 ^ 1023 之间的浮点数

可以加倍

考虑到内存中双精度型的大小,很明显双精度型可以包含一个int(可以执行更多操作而可以执行更少操作的人)。

加倍为int

由于我们丢失了信息,因此不允许进行此演员表转换。 例如,如果我们要转换一个像1.1618这样的浮点数,则会丢失信息。这个双精度数的“等效项”可以是1或2,但是Java永远不会通过符号'='为您决定可能性。您必须使用例如none之类的函数来选择要将双精度转换为整数的转换。