我不知道您是否认为这是一个重要问题,但我想知道。 float是一个浮点数(4个字节)。 double是浮点数(8个字节)。 为什么我们要定义双重淘汰制:
double d = 2.1;
但是我们需要使用浮点数进行投射:
float f = (float) 2.1;
或
float f = 2.1f;
谢谢。
答案 0 :(得分:1)
双打更精确,额外的存储成本几乎总是可以忽略不计。因此,在Java中,默认情况下2.1是双重类型。现在要将double转换为float时,您需要进行转换,而无需将double数据分配给double类型转换。
答案 1 :(得分:1)
如果浮点文字以字母F
或f
结尾,则其类型为float;否则,其类型为double
,并且可以选择以字母D
或d
结尾。
浮点类型(float
和double
)也可以使用E或e(对于科学计数法),F
或f
(32位浮点)表示。文字)和D
或d
(64位双精度文字;这是默认值,按惯例省略)。
double d1 = 123.4;
// same value as d1, but in scientific notation
double d2 = 1.234e2;
float f1 = 123.4f;
答案 2 :(得分:1)
默认情况下,Java编译器将2.1视为double(64位)而不是float(32位)。声明float f = 2.1将导致精度损失。因此,Java迫使您进行强制转换以确保您声明的是float变量。
如果不进行强制转换,则可以在浮点数末尾使用字母“ f”来实现相同的目的。例如,float f=2.1f
。
现在您可能会问,为什么从long转换为float时不需要强制转换,因为前者在内部使用的位比后者更多。答案是Java不需要在扩展路径上进行强制转换-字节=>短=>整数=>长=>浮点=>双精度。 (从左到右(扩大转换)-不需要强制转换; 从右到左(变窄的转换-需要显式强制转换)