在Java中,如果双精度值足够大,则返回一个错误
我基本上是为了学习java而玩数据类型的,下面是我感到困惑的地方在Java中,如果双精度值足够大,则返回一个错误,java,type-conversion,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
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上尝试这个方法,但我认为编译器不会有太大的不同。
这是否意味着强制转换也会导致修改原始变量?编译器将文本345839052304598视为
整数,因为该值对于整数太大,因此会引发编译时错误。因此,您需要告诉编译器,您要使用的值实际上是双精度值,您可以通过以下方式执行:
douVar =345839052304598D; // note D at the end which tells comipler that it is double
在Java中,不带小数的常量默认为整数。
有两种方法可以将常量定义更改为双精度定义:
在末尾添加一个d
或d
在末尾添加一个.0
只需更改douVar=345839052304598代码>至douVar=345839052304598.00代码>当您将数字声明为345839052304598时,编译器将尝试将其读取为32位整数。但由于这超出了int的范围,编译器会抛出错误。
您可以使用d、d或L后缀或添加像.0这样的小数位来处理此问题,Java将345839052304598
解释为整数
在Java中,整数的长度为4字节,因此其值范围为-2147483648
到2147483647
。(您的号码显然不在该范围内)
要使Java将数字视为双精度数字,必须编写:
double d = 345839052304598D;
/* or */
double d1 = 345839052304598.0;
(对于长的
也是如此,在这种情况下,您必须编写L
而不是D
)“强制转换也会导致修改原始变量”?这是什么意思?什么也不会“发生”直到您修复编译错误。很高兴看到这么多有用的回答,尽管对否决票不是很满意,或者也许有人可以解释我获得否决票的原因。我猜可能发生了否决票,因为您的问题标题实际上与您的实际问题无关。作为Java初学者,我认为casting改变了原始变量的数据类型。我就是这样解释的,答案对我来说很清楚。一个.0
就足够了。另一个选项是在数字后添加d
或d
后缀,将其更改为double
。你能告诉我为什么它没有在这个语句中返回一个错误吗:double douVar=300000000000.323262342134353代码>这似乎是一个比整数大得多的值。当您使用300000000000.323262342134353时,编译器将检测到一个小数点,这意味着一个双精度值。@DarshanLila数值常量中带有
的默认数据类型是双精度
,而不是浮点
。
double d = 345839052304598D;
/* or */
double d1 = 345839052304598.0;