Double值足够大会在Java中返回错误

fre*_*ner 0 java type-conversion

我基本上是在玩数据类型,以便学习java,这就是我感到困惑的地方.

double douVar = 30000000000.323262342134353;
int intVar = (int)douVar; // casting
System.out.println(intVar); 
Run Code Online (Sandbox Code Playgroud)

现在转换douVar为字符串我覆盖double变量:

douVar = 345839052304598; // returns an error: Integer number too long
System.out.println(Double.toString(douVar));
Run Code Online (Sandbox Code Playgroud)

完整错误:

Error:(20, 18) java: integer number too large: 345839052304598
Run Code Online (Sandbox Code Playgroud)

我正在使用IntellijIDEA编译器.我没有在eclipse上尝试这个,但我认为编译器不会那么不同.这是否意味着施法也会导致修改原始变量?

Bre*_*ken 5

在Java中,默认情况下,没有小数的常数是整数.有两种方法可以将常量定义更改为double:

  1. 添加一个dD最后.
  2. 添加.0在末尾
douVar = 345839052304598d;
douVar = 345839052304598.0;
Run Code Online (Sandbox Code Playgroud)


i_t*_*uro 5

Java解释345839052304598为整数.

在Java中,Integer的长度为4个字节,因此其值的范围–2 147 483 6482 147 483 647.(你的号码显然不在那个范围内)

要使Java将数字视为double,您必须编写:

double d = 345839052304598D;
/* or */
double d1 = 345839052304598.0;
Run Code Online (Sandbox Code Playgroud)

(同样适用于a long,你必须写L而不是D在那种情况下)