为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森卡 2021-08-19 16:16:53
我不知道你是否认为这是一个重要的问题,但我想知道。float 是一个浮点数(4 个字节)。double 是一个浮点数(8 个字节)。为什么我们在没有强制转换的情况下定义 double:double d = 2.1;但是我们需要使用浮点数进行转换:float f = (float) 2.1;要么float f = 2.1f;先感谢您。
查看完整描述

3 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

如果浮点字面量以字母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 notation

double d2 = 1.234e2;

float f1  = 123.4f;


查看完整回答
反对 回复 2021-08-19
?
翻阅古今

TA贡献1780条经验 获得超5个赞

默认情况下,Java 编译器将 2.1 视为双精度型(64 位)而不是浮点型(32 位)。声明 float f=2.1 会导致精度损失。因此,Java 强制您进行转换以确保您声明的是浮点变量。

无需强制转换,您可以使用浮点数末尾的字母“f”来实现相同的效果。例如,float f=2.1f

现在您可能会问,为什么从 long 转换为 float 时不需要强制转换,因为前者在内部使用的位比后者多。答案是 Java 不需要在不断扩大的路径上进行转换 - byte => short => int => long => float => double。(从左到右(扩大转换) - 不需要强制转换;从右到左(缩小转换) - 需要显式转换)


查看完整回答
反对 回复 2021-08-19
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

双打更精确,额外的存储成本几乎总是可以忽略不计。所以在 Java 中默认 2.1 是 double 类型。现在要将 double 转换为 float 您需要进行转换,而无需将 double 数据分配给 double 类型转换。


查看完整回答
反对 回复 2021-08-19
  • 3 回答
  • 0 关注
  • 239 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信