1

我正在做家庭作业(我不是一个说谎的人),老实说,我被这些问题难住了。我有 3 年的编程经验,但被课堂上一些最简单的问题难住了,哈哈。Java 新手,而不是编程新手。我想讨论为什么这些问题会导致答案,以及为什么它是这样或那样的。

1) 写 3.4,这是双精度数还是浮点数?

我想说它默认为浮点数,因为它占用的空间(32 位)与双(64)位相比更少。由于 3.4 是一个小数字,我会假设它是一个浮点数?

2) 将 x 声明为双精度数,并将其赋值为 3.4(作为双精度数)。

我认为这double x = 3.4d;不是 100% 确定的

3) 将 y 声明为浮点数并将其赋值为 3.4(作为浮点数)。

与上面类似,我认为是float y = 3.4f;

通常不会有人来这里以这种方式寻求硬件帮助……但我又没有教科书了,因为我刚订购了它。我宁愿讨论为什么它是这样或那样的,这样我就可以更好地理解 Java 的工作原理。谢谢。

4

6 回答 6

2

在第一个问题上,3.4是一个double。如果你想要一个float文字,你会使用3.4f.


第二个问题:

double x = 3.4; // trailing D/d is optional and rarely used.

第三个问题,您是对的,将其声明为并在文字上float使用后缀。f


有关更多详细信息,请参见此处,特别是标题为 的部分Floating-Point Literals,复制到此处,稍作修改以强调:

如果浮点字面量以字母 F 或 f 结尾,则它的类型为 float;否则它的类型是 double 并且可以选择以字母 D 或 d 结尾。

浮点类型(float 和 double)也可以使用Ee(用于科学计数法)、Ff(32 位浮点字面量)和Dd(64 位双精度字面值;这是默认值并由约定被省略)。

double d1 = 123.4;
double d2 = 1.234e2; // same value as d1, but in scientific notation
float f1  = 123.4f;
于 2013-04-03T05:13:15.367 回答
1
  1. 3.4 是双精度数,f在它后面加上一个浮点数。
  2. 正确,但请记住;在行尾添加 a。
  3. 和上面一样。
于 2013-04-03T05:13:23.390 回答
0

默认情况下,Java 浮点文字是双精度的,就像您指定了d修饰符一样。如果您想要 32 位浮点数,则必须显式声明f修饰符。

于 2013-04-03T05:14:13.300 回答
0
  1. 默认情况下,java 将浮点文字视为双精度值。因此 3.4 是两倍。
  2. 双 x = 3.4;
  3. 你写的是正确的。
于 2013-04-03T05:14:33.373 回答
0

如果它是浮点数,则意味着您必须像这样声明 float y = 3.4* f * .f 向 jvm 表明它是一个浮点数。如果您忘记 f (3.4f),它将默认视为双精度并且需要 64 位

于 2013-04-03T05:19:02.223 回答
0

从您的评论中:

I'm curious, why are they doubles by default

(恕我直言)我认为高精度比低精度好。当您尝试时,Java(C 中也是如此)可以向下转换为浮点数,因此这不会引起问题。

于 2013-04-03T05:23:43.273 回答