我基本上在玩数据类型以学习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上尝试这个,但我认为编译器不会那么不同。 这是否意味着转换也会导致修改原始变量?
答案 0 :(得分:5)
在Java中,默认情况下,没有小数的常数是整数。 有两种方法可以将常量定义更改为double:
d
或D
。.0
douVar = 345839052304598d;
douVar = 345839052304598.0;
答案 1 :(得分:5)
Java将345839052304598
解释为整数。
在Java中,Integer长度为4个字节,因此其值范围为–2 147 483 648
到2 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;