首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类型转换为long隐式浮动,而不是缩小

类型转换为long隐式浮动,而不是缩小
EN

Stack Overflow用户
提问于 2014-02-27 11:39:55
回答 2查看 1.5K关注 0票数 1

在java中,隐式转换的层次结构是byte -> short -> int -> long -> float -> double,Long可以容纳8个字节的数据。那么,为什么它是隐式类型的浮动,它只能容纳4个字节,而不是双倍,可以容纳8 bytes.Why,它不被认为是缩小?

哪些原语类型将隐式转换为char?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-27 11:46:21

这与使用多少位数据无关。它是关于可以被表示的尺度。

来自JLS第5.1.2节(拓宽原语转换)

扩大的原语转换不会丢失有关数字值的总体大小的信息。 ..。 若将int或长值转换为浮动,或将长值转换为双倍,则可能会导致精度下降--也就是说,结果可能会丢失一些最不重要的值。在这种情况下,产生的浮点值将是整数值的正确舍入版本,使用IEEE 754轮到最近模式(§4.2.4)。

long的范围比float的范围小得多,但固定的精度为1,float的精度在绝对值上是不同的。换句话说,没有一个long超出了float的范围,但是有一些long值不能精确地表示为float值。

迁移到double无助于此--有些long值也不能精确地表示为double

票数 4
EN

Stack Overflow用户

发布于 2021-09-25 05:08:33

仅仅因为long需要8个字节,float就只有4个字节。Java是如何将这8个字节填充成4个字节的?数据将会丢失。难到不是么?

从长(8字节)到浮点数(4字节)的转换是隐式的,因为浮点数以指数的形式保存值。

浮动存储值以指数的形式存储,这意味着2345678将存储为2.345678E6,其中E6代表10到6的幂

因此,当我们存储一个长值(当然不能存储在浮点数中)时,JVM会将其转换为指数形式,然后存储它。比方说,如果我们想要在浮点数中存储1234567891234的长值,那么它首先将被转换成如下指数形式: 1.234567891234E12,这样就可以将值存储在浮动变量中,这实际上是隐式的。

坚持住!你可能注意到的事情仍然很少。那么精确性呢?小数点后浮点数的精度为6-7位?我还在失去数据。

这里还有一个来自数据存储的概念。JVM并不关心精度的损失。它只关心震级的损失。在上面的例子中,1是数量级,小数位之后的数字是精度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22067409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档