Java:为什么我们需要转换浮点数而不是双精度数?

我不知道你是否认为这是一个重要的问题,但我想知道。float 是一个浮点数(4 个字节)。double 是一个浮点数(8 个字节)。为什么我们在没有强制转换的情况下定义 double:

double d = 2.1;

但是我们需要使用浮点数进行转换:

float f = (float) 2.1;

要么

float f = 2.1f;

先感谢您。


慕森卡
浏览 243回答 3
3回答

函数式编程

如果浮点字面量以字母For结尾,则它属于 float 类型f。否则它的类型是double,它可以选择以字母Dor结尾d。浮点类型 ( floatand double) 也可以使用 E 或 e(用于科学记数法)F或f(32 位浮点字面量)和D或d(64 位双字面量;这是默认值,按惯例省略)表示。double d1 = 123.4;// same value as d1, but in scientific notationdouble d2 = 1.234e2;float f1  = 123.4f;

翻阅古今

默认情况下,Java 编译器将 2.1 视为双精度型(64 位)而不是浮点型(32 位)。声明 float f=2.1 会导致精度损失。因此,Java 强制您进行转换以确保您声明的是浮点变量。无需强制转换,您可以使用浮点数末尾的字母“f”来实现相同的效果。例如,float f=2.1f。现在您可能会问,为什么从 long 转换为 float 时不需要强制转换,因为前者在内部使用的位比后者多。答案是 Java 不需要在不断扩大的路径上进行转换 - byte => short => int => long => float => double。(从左到右(扩大转换) - 不需要强制转换;从右到左(缩小转换) - 需要显式转换)

料青山看我应如是

双打更精确,额外的存储成本几乎总是可以忽略不计。所以在 Java 中默认 2.1 是 double 类型。现在要将 double 转换为 float 您需要进行转换,而无需将 double 数据分配给 double 类型转换。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java