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

时间:2014-08-02 11:44:48

标签: java type-conversion

我基本上在玩数据类型以学习java,这就是我感到困惑的事情。

double douVar = 30000000000.323262342134353;
int intVar = (int)douVar; // casting
System.out.println(intVar); 

现在将douVar转换为字符串i会覆盖double变量:

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

完成错误:

Error:(20, 18) java: integer number too large: 345839052304598

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

5 个答案:

答案 0 :(得分:5)

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

  1. 在最后添加dD
  2. 在末尾添加.0
  3. douVar = 345839052304598d;
    douVar = 345839052304598.0;
    

答案 1 :(得分:5)

Java将345839052304598解释为整数。

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

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

double d = 345839052304598D;
/* or */
double d1 = 345839052304598.0;

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

答案 2 :(得分:3)

integer将文字 345839052304598 视为compiler,因为此值对于整数来说很大,会引发编译时错误。因此,您需要告诉编译器您要使用的值实际上是double值,您可以按以下方式执行:

douVar =345839052304598D; // note D at the end which tells comipler that it is double

答案 3 :(得分:2)

当您将数字声明为345839052304598时,编译器会尝试将其读取为32位整数。但是因为这超出了int编译器的范围会引发错误。 你可以使用d,D或L后缀或添加小数位,如.0来处理这个,

答案 4 :(得分:1)

只需将douVar = 345839052304598;更改为douVar = 345839052304598.00;

即可