当前位置: 首页 > 面试题库 >

Java为什么将long(64)转换为float(32)被认为变宽了?

徐承载
2023-03-14
问题内容

正如甲骨文所说

来自 Oracle
Docs的

参考

扩展基元转换19个特定于基元类型的转换称为扩展基元转换:

  1. 字节到short,int,long,float或double
  2. 短至int,long,float或double
  3. char转换为int,long,float或double
  4. int转换为long,float或double
  5. 多长时间浮动或翻倍
  6. 浮动到两倍

如果浮点数具有32位,而long则具有64位,那么如何考虑加宽?难道这不应该被视为缩小?


问题答案:

可以由a表示的值的范围floatdouble比可以由a表示的范围大得多long。虽然从转换时,人们可能会失去显著数字longfloat,它仍然是一个“拉”操作,因为范围更广。

根据Java语言规范§5.1.2:

将int或long值转换为float或将long值转换为double的加宽转换可能会导致精度降低-
也就是说,结果可能会丢失该值的某些最低有效位。在这种情况下,使用IEEE 754舍入到最近模式(第4.2.4节),所得的浮点值将是整数值的正确舍入版本。

请注意,a double可以准确代表每个可能的int值。



 类似资料:
  • 加宽基元转换19基元类型上的特定转换称为加宽基元转换: 字节到短、int、long、float或double 短到int、long、float或double 字符为int、long、float或double 从int到long、float或double 长时间浮动还是加倍? 浮动到双倍 如果浮点数为32位,而长点数为64位,那该如何被认为是加宽的呢?这难道不应该被认为是缩小范围吗?

  • 所以,问题是--为什么在I=L的情况下,当L的大小足够小到适合I时,必须显式地进行,但在F=L的情况下,当L的大小也适合F时,铸造可以隐式地进行,而不会产生错误。 我的意思是,在这两种情况下,右操作数的大小可能不适合左操作数。那么,为什么在一种情况下(I=L),强制转换必须显式进行,而在另一种情况下(F=L)可以隐式进行呢?虽然隐式地将长var转换为int var比隐式地将长var转换为浮点var

  • 问题内容: 如何从float转换为string或从string转换为float? 在我的情况下,我需要在2个值字符串(我从表中获得的值)和我计算出的浮点值之间进行断言。 我尝试从浮动到字符串: 但是断言失败 问题答案: 使用Java的类。 为了进行比较,将字符串转换为float并比较两个float总是更好。这是因为对于一个浮点数,存在多个字符串表示形式,与字符串相比,它们是不同的(例如“ 25”!

  • 问题内容: Java中的所有数字都应为int类型。以下行在Java> 1.5中是合法的 同样的机制去和实例。但是龙的作品完全不同。以下代码给出了编译时错误 Long对长类型使用自动装箱方法,因此 我看不到为什么不能将int赋给Long变量。关于这个问题有什么想法吗? 问题答案: 我认为问题不在于泛型转换原语和包装。问题是关于将int转换为java.lang.Long和将int转换为java.lan

  • 问题内容: 如何在Java中将值转换为值? 问题答案: 或如果您不必担心null: 在这两种情况下,您都可能会遇到溢出问题(因为Long可以比Integer存储更大的范围)。 Java 8有一个辅助方法来检查溢出(在这种情况下,您会得到一个异常):

  • 问题内容: 我面临与转换为相关的问题。实际上,我将浮点类型存储在数据库中,但是当我们通过下面的代码从数据库中获取数据时,它是类型。我们获得的价值以表格的形式出现。 那么我们如何获得像这样的格式数据呢? 问题答案: 只需将您的双曲投向花车即可。 还要注意,基本类型不能存储无限的数字集: