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

在Java中将整数文字分配给double变量

司徒云
2023-03-14
问题内容

如果我执行以下操作

double d = 0;

因为0是使用32位的整数文字,而d是使用64位的双精度变量,那么剩余的32位会被随机垃圾填充,还是Java正确地提升了文字?


问题答案:

Java正确地将其提升,否则会有相当多的代码是有问题的:-)

Java语言规范的5.1.2节详细介绍了这一点:

以下19个特定于原始类型的特定转换称为扩展原始转换:

byte to short, int, long, float, or double
short to int, long, float, or double
char to int, long, float, or double
int to long, float, or double
long to float or double
float to double

扩展原始转换不会丢失有关数值总体大小的信息。确实,从整数类型到另一整数类型以及从float到double的转换根本不会丢失任何信息。数值将精确保留。在strictfp表达式中,从float到double的转换也精确地保留了数值。但是,这种不严格的转换可能会丢失有关转换值整体大小的信息。

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

从32位Java转换int到一个double(在Java中,具有精度50+位),将不会丢失的大小
任何精度。如果您使用的常数long由于其值而被强制为a ,则 可能会 失去精度,因为a long具有64位精度。



 类似资料:
  • 问题内容: 为什么以下代码无法编译 但是以下确实可以编译 在这两种情况下,我不只是将整数值分配给char吗? 问题答案: 可以将A 分配给不带强制转换的,因为这是扩大的转换。反之,将a 转换为a 需要转换,因为这是缩小的转换。 另请参见JLS。第5章。转换和升级。

  • 问题内容: 假设我有一个功能 现在,我想将函数分配给一个名为的变量,这样,如果我使用,它将再次调用该函数。如果我只是做作业,它就会返回。 问题答案: 您根本不调用该函数。 括号告诉蟒蛇,你调用的函数,所以当你把它们放在那里,它调用的功能,并指定值 返回 的(在这种情况下)。

  • 问题内容: 在Java中,我想将双精度型转换为整数,我知道您是否这样做: 您得到y = 1。如果您这样做: 您可能会得到2。但是,我想知道:由于整数的双精度表示有时看起来像1.9999999998之类,所以通过Math.round()创建的双精度转换是否仍会导致截断的向下数字,而不是比我们要查找的舍入数(即:1而不是所示代码中的2)? (是的,我的确这样表示:x 是否有 任何 值,其中y将显示x的

  • 问题内容: 仅仅使用Java 8中的新lambda和功能特性,我不确定如何做到这一点。 例如,以下内容有效: 但是以下内容给我语法错误: 有任何想法吗? 问题答案: 您已经忘记了: 运行:

  • 您好,我正在开发一个swing聊天应用程序,其中聊天历史记录存储在一个xml文件中。在NetBeans项目中完成后,我能够获取xml文件并将其显示在表中 但是当转换成jar文件时,我无法使用xml文件。我尝试过各种方法,比如getClass()。getResource()方法,但它检索URL而不是字符串,如果使用toString()方法将其转换为字符串,则无法将其用作解析xml文件的有效路径。 下

  • 我一直在试图找到一种简单的方法来读取Rust中的变量,但是到目前为止还没有任何运气。Rust Book中的所有示例处理字符串AFAIK,我找不到任何有关整数或浮点数的工作。