我实际上并没有具体的代码,但我和朋友的代码完全相同,只是他使用了0.
而我只使用了0
。我的编译,但他没有删除点。但是现在,我意外地初始化了一个变量double x = 0.
,忘了删除这个点,然后编译了!为什么呢?
答案 0 :(得分:3)
在这里猜测,您/您的朋友可能有一个不允许浮点的数据类型,例如checkip.getExternalIp().then(function (ip) {
console.log("External IP = "+ip);
}, function(err) {
// handle error here
});
和int
long
和float
等数据类型可让您设置double
答案 1 :(得分:3)
带小数点的任何数字都被视为double
字面值(正式地称为floating-point literal)。在那种情况下,你可以像使用双倍一样使用它。
因此,调用它的语法是用括号中的可选部分划分的:
Digits . [Digits] [ExponentPart] [FloatTypeSuffix]
就像你无法做到这一点......
int num = 10.6;
......你无法做到这一点......
int num = 10.;
...因为那是 double
。
答案 2 :(得分:1)
让我们编写一个示例程序。
class A {
public static void main(String args[]) {
int a = 1;
int b = 2.;
double c = 3;
double d = 4.;
}
}
其中三个分配很好,但有一个会触发编译错误:
A.java:4: error: possible loss of precision
int b = 2.;
^
required: int
found: double
1 error
那是怎么回事? 1
和3
是整数常量; 2.
和4.
是浮点常量。当您尝试在需要浮点值的上下文中使用整数时,整数值会自动转换为浮点。这是可能的,因为所有整数值都可以用浮点类型¹表示。
另一方面,int b = 2.
无效,因为通常浮点值不能用整数类型表示。例如,值2.1不能表示为int
(或实际上任何其他整数类型)。 Java不会以更改它们的方式自动转换值,因此它拒绝任何将浮点值赋给整数变量的尝试。更一般地,Java拒绝在期望整数时使用浮点值的任何尝试。 Java的规则基于类型,而不是基于特定的值,所以即使2.
的情况也可以将例外的值解释为适合整数类型2。
您可以使用强制转换来强制转换。当浮点值转换为整数类型时,它会向零舍入(即正值向下舍入,负值向上舍入)。
int b = (int)2.;
¹对于int
和double
,所有int
值都可以由double
精确表示。这不适用于整数和浮点类型的某些其他组合:例如,类型long
的某些大值不能由类型double
的值精确表示;但是它们可以近似地表示,并且这足够好,因为浮点值首先是近似值。 子>
²但实际上该值不合适:2.0
表示“大约2”(因为所有浮点值都是近似值),而2
表示“整数2(完全)”。
答案 3 :(得分:1)
正如@Turing85所评论的那样,0是一个整数,0(零点)是一个双精度数。 很可能你的朋友正在使用整数变量来存储双值。 例如
int zeroInteger = 0.;
无法工作,因为(0.)是双字面值,它不能分配给整数变量,至少没有明确的类型转换。
double zeroDouble = 0.;
这应该可以作为变量的双重类型。
任何表示值但未存储在变量中的字符序列称为文字。以下是一些有效的Java文字:
由于Java支持Integer(byte,short,int,long)和浮点(float,double)数字的多种数据类型,因此必须预先确定要分配给文字值的类型。
如果是整数文字,则默认数据类型为整数;如果是浮点数,则默认数据类型为 double 。
由于浮点文字的默认数据类型是double,如果我们尝试将它分配给float变量,Java会给出错误。
float myFloat = 2.3;
这会产生错误。 正确的方法是将文字强制转换为浮动或只是附加" f"或" F" 。
float myFloat = 2.3f; // or 2.3F
以上是正确的方法。
同样适用于整数文字。如果我们尝试将整数文字分配给一个字节或短变量,Java会产生错误。然而,在这里它通过实际检查分配的值是否在变量的范围之外然后只产生错误来做一些智能。 例如。
byte someByte = 127;// is ok
byte someByte = 128; // is not ok