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

如何在Java中将double转换为int转换

慎望
2023-03-14
问题内容

我是Java的新手,想知道double转换为int
cast如何工作吗?我知道,只需将低32位转换为int就很容易了,但是将double(64位)转换为int(32位)呢?来自二进制的double中的那64位是Double-
precision浮点格式(Mantissa),那么它如何在内部转换为int?


问题答案:

所有这些都记录在JLS的5.1.3节中。

第一步,将浮点数转换为long(如果T为long)或int(如果T为byte,short,char或int),如下所示:

如果浮点数为NaN(第4.2.3节),则转换第一步的结果为int或long 0。

  • 否则,如果浮点数不是无穷大,则将浮点值舍入为整数值V,并使用IEEE 754舍入为零模式(第4.2.3节)将其舍入为零。然后有两种情况:

    • 如果T为long,并且此整数值可以表示为long,那么第一步的结果就是long值V。

    • 否则,如果此整数值可以表示为int,则第一步的结果是int值V。

  • 否则,以下两种情况之一必须为真:

    • 该值必须太小(大值的负值或负无穷大),并且第一步的结果是int或long类型的最小可表示值。

    • 该值必须太大(正值较大或正无穷大),并且第一步的结果是int或long类型的最大可表示值。

(这里的第二个步骤是无关紧要的,当Tint)。

在大多数情况下,我希望可以使用硬件支持来 实现 这一点-将浮点数转换为整数通常是由CPU处理的。



 类似资料:
  • 问题内容: 所以我的问题是:为什么不执行编译错误? 问题答案: 四种情况中的三种正确报告了错误。复合分配是该规则的唯一例外。Java语言规范,第15.26.2部分,解释了以下原因: 15.26.2复合赋值运算符 形式的复合赋值表达式等效于,其中是的类型,不同之处在于该表达式仅被评估一次。 例如,以下代码是正确的: 并导致x的值为7,因为它等效于: 如您所见,通过隐式插入强制类型转换可以避免该错误。

  • 问题内容: 我正在实现一个接口,该接口的功能类似于可以包含某种对象的表的功能。该接口指定以下功能: 在我的实现中,我感到很困惑的是,我将表数据存储在2D 数组()中。当我需要返回值时,我想执行以下操作(假定只在包含double的列上调用,因此将没有): 但是- Java不允许强制转换为。将其强制转换为可以,因为它是一个对象,而不是基元,但是我的接口指定数据将以形式返回。 所以我有两个问题: 有什么

  • 问题内容: 我们如何在Java中转换成?我有一个要求,我们必须使用Double作为参数,但是我们越来越明白了,所以我必须转换成。 问题答案: 您需要使用该方法从BigDecimal对象获取double值。

  • 考虑此代码段: 在我的机器上运行这个会打印两个转换的。但是和只能是吗? 据我所知,这是一个扩展的原语转换,规范中说: 拓宽的基元转换不会丢失有关数值的整体大小的信息。 以及 将int或long值加宽为float或将long值加宽为double可能会导致精度损失 据我所知,上述规范意味着将始终成为,但可以转换为其他内容(例如或类似内容)。我的规格解释正确吗?

  • 问题内容: 我一直在这里找到问题,并且Google的人们遇到了麻烦,而不是遇到了其他麻烦。但我敢肯定,我不是以前已经从去碰到这种情况的唯一一个到。 我发现的唯一其他答案是“首先将其设置为Long”,这实际上并没有解决这个问题。 我最初尝试投射,但得到了“ ” 如您所料,我有点困惑,我被困住了,因为有些内容以形式出现,而我要存储其信息的实体要求序列号为Long。 问题答案: 请注意,强制转换为和强制

  • 问题内容: (我是Java编程的新手) 我有例如: 我需要在撇号中得到数字9本身。我尝试执行以下操作 但这没用。 那么我该怎么做才能得到撇号呢? 问题答案: ASCII表的排列方式是使字符的值比的值大九;字符的值比的值大8 ; 等等。 因此,您可以通过减去以获得十进制数字char的int值。