将不同类型分类为一种类型

时间:2013-04-06 05:41:49

标签: java double type-conversion long-integer

long是一个64位带符号的二进制补码整数。 Long是128位带符号的二进制补码整数吗?我只想在继续之前确认这一点。

Long l = 6;
int i = 4;
Integer ii = 2;
l += (l/i) * ii;

我想知道我需要进行类型转换才能获得3而不是2。

我尝试了以下内容:

l += (long) (((double) l/i) * ii);

当我使用l/idouble进行类型转换时,我会返回1而不是1.5

让我们说我要对一个Long进行类型转换,这是Long的最大数字,有(长),会发生什么,因为long是一个64位带符号的二进制补码整数。

3 个答案:

答案 0 :(得分:4)

long(小写)是一个基本类型的64位整数。 Long(大写)是包装long(小写)的引用类型(对象)。因此Long将数据编码为long,因此也是64位。如果你想要> 64位精度,查看提供任意高精度的java.math.BigInteger

您的问题不是来自部门声明中的错误投射,而是来自最后的演员long

l += (long) (((double) l/i) * ii);
       ^
       here

(((double) l/i) * ii)的结果是值为3.0的double。由于浮点运算的特殊性,当它转换为long时,它变为2。

要解决此问题,请使用Math.round代替类型转换:

 l += Math.round(((double) l/i) * ii);

答案 1 :(得分:0)

你的(l/i) * ii意味着力量?如果是这样,也许你应该使用BigDecimal。顺便说一句,1/i等于0;请改用1.0/i

答案 2 :(得分:0)

Long是一个包含与long原始对象相关的构造函数,方法和常量的类(例如。Long.MAX_VALUE,它将为您提供long的最大值可以代表)。将long转换为Long时,您需要从值类型转换为引用类型。用于表示值的位数不会改变。