Java 将不同类型转换为一种类型

Java 将不同类型转换为一种类型,java,double,type-conversion,long-integer,Java,Double,Type Conversion,Long Integer,long是一个64位有符号2的补码整数。Long是128位有符号2的补码整数吗?我只是想在继续之前确认一下 Long l = 6; int i = 4; Integer ii = 2; l += (l/i) * ii; 我想知道我需要在哪里打字才能得到3,而不是2 我尝试了以下方法: l += (long) (((double) l/i) * ii); 当我用double输入l/I时,我得到的是1,而不是1.5 假设我要对一个Long进行类型转换,这是Long的最大值,使用Long,会发生什

long是一个64位有符号2的补码整数。Long是128位有符号2的补码整数吗?我只是想在继续之前确认一下

Long l = 6;
int i = 4;
Integer ii = 2;
l += (l/i) * ii;
我想知道我需要在哪里打字才能得到3,而不是2

我尝试了以下方法:

l += (long) (((double) l/i) * ii);
当我用double输入l/I时,我得到的是1,而不是1.5

假设我要对一个Long进行类型转换,这是Long的最大值,使用Long,会发生什么,因为Long是一个64位有符号2的补码整数。

Long小写是一个基本类型64位整数。长大写是封装长小写的引用类型对象。So Long将其数据编码为Long,因此也是64位的。如果您想要>64位精度,请查看哪个提供任意高精度

您的问题并非来自分部声明中的错误铸造,而是来自最终的长铸件:

l += (long) (((double) l/i) * ii);
       ^
       here
双l/i*ii的结果是值为3.0的两倍。由于浮点运算的特殊性,当它转换为长整数时,它将变为2

要解决此问题,请使用Math.round而不是typecast:

 l += Math.round(((double) l/i) * ii);
长小写是基元类型的64位整数。长大写是封装长小写的引用类型对象。So Long将其数据编码为Long,因此也是64位的。如果您想要>64位精度,请查看哪个提供任意高精度

您的问题并非来自分部声明中的错误铸造,而是来自最终的长铸件:

l += (long) (((double) l/i) * ii);
       ^
       here
双l/i*ii的结果是值为3.0的两倍。由于浮点运算的特殊性,当它转换为长整数时,它将变为2

要解决此问题,请使用Math.round而不是typecast:

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


你的信用证意味着权力?如果是这样,也许你应该使用BigDecimal。顺便说一下,1/i等于0;用1.0/i代替。

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

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

Long是一个包含与Long基本体对象相关的构造函数、方法和常量的类,例如Long.MAX_值,它将为您提供Long可以表示的最大值。将long转换为long时,就是从值类型转换为引用类型。用于表示值的位数不会改变。

大小取决于编译器。使用sizeof。还添加标记C或C++,它既不是C也不是C++。我添加了一个Java标记。@GrijeshChauhan sizeof不是确定整数用来表示的值位数的准确方法,因为可能存在填充位。@dalwh您可以更改Tags@modifiablelvalue是的,我也在评论C/C++。OP忘记添加语言标记。大小取决于编译器。使用sizeof。还添加标记C或C++,它既不是C也不是C++。我添加了一个Java标记。@GrijeshChauhan sizeof不是确定整数用来表示的值位数的准确方法,因为可能存在填充位。@dalwh您可以更改Tags@modifiablelvalue是的,我也在评论C/C++。OP忘记添加语言标记。如果long和long都是64位整数,除了它附带的所有方法之外,还有什么理由使用long吗?long是一种引用类型,因此它可以在许多基本类型无法使用的地方使用。例如,在泛型中,例如ArrayList起作用,但ArrayList不起作用。然而,在通常的实践中,它没有任何优势。如果long和long都是64位整数,那么除了它附带的所有方法之外,还有理由使用long吗?long是一种引用类型,因此它可以在许多基本类型无法使用的地方使用。例如,在泛型中,例如ArrayList起作用,但ArrayList不起作用。然而,在通常的实践中,它没有任何优势。我考虑使用BigDecimal和BigInteger,因为我需要一些可以保存64位正整数的东西。BigDecimal加起来有多大?我还注意到他们把东西串在一起,所以我想知道哪个更好将我使用的所有整数转换为BigDecimal/BigInteger以简化生活-保留不同类型的int、long、double等以节省资源正如api所说,BigInteger提供任意精度的整数,它可以保存任意大整数感谢您的确认。那更好吗?将我使用的所有整数转换为BigDecimal/BigInteger以简化操作,或保留不同类型的int、long、double等以保存资源。这取决于您的整数是否大于64位。如果您的整数大于64位,则除了在BigIn上使用BigInteger操作外,您没有其他选项
teger比原语更昂贵。如果您的整数没有机会超过64位,请使用long,不要使用BigInteger。我考虑使用BigDecimal和BigInteger,因为我需要一些可以容纳64位正整数的东西。BigDecimal加起来有多大?我还注意到他们把东西串在一起,所以我想知道哪个更好将我使用的所有整数转换为BigDecimal/BigInteger以简化生活-保留不同类型的int、long、double等以节省资源正如api所说,BigInteger提供任意精度的整数,它可以保存任意大整数感谢您的确认。那更好吗?将我使用的所有整数转换为BigDecimal/BigInteger以简化操作,或保留不同类型的int、long、double等以节省资源。这取决于您的整数是否大于64位,除了使用BigInteger外,您没有其他选择,BigInteger上的操作比基元上的操作更昂贵。如果您的整数没有机会超过64位,请使用long,切勿使用BigInteger。