Java中从Long到Double的转换


93

有什么办法可以将Long数据类型转换为Doubledouble吗?

例如,我需要转换15552451Ldouble数据类型。

Answers:


136

您可以简单地做:

double d = (double)15552451L;

或者,您可以从Long对象中获得两倍的信息:

Long l = new Long(15552451L);
double d = l.doubleValue();

6
那里不需要任何字符串解析:Long.valueOf(15552451L).doubleValue()如果您想通过Long。请注意,从内部来讲,这与从进行的投射相同,double只是您要进行一些自动/拆箱操作。
乔·科尔尼

4
是的 解析一个字符串来做到这一点(现在已经被编辑出来了)将使性能降低许多数量级。装箱便宜一些,但仍然值得避免,尤其是在这种情况下(使用new),装箱不能被淘汰。
乔·科尔尼

我认为该示例应该表明您可以从Long-> double获得。龙被初始化如何似乎并不那么重要..
AMS

1
现在,已对答案中的示例进行了编辑,看起来更加合理。我认为通过字符串从值到双精度的转换不是一个好习惯。我会认为这是毫无争议的。
乔·科尔尼

1
您不需要显式强制转换。它只适用于:double d = 15552451L;
cutemachine

20

简单的铸造?

double d = (double)15552451L;

如果只是字面意思15552451d
乔恩·弗里德曼

2
我什至认为没有必要进行强制转换,您可以创建一个具有如下长值的double:“ double d = 1234L;”。
crusam

可能不是-但问题很基本,足以保证引入诸如铸造之类的概念。
吉姆·布里索


4

您是否正在寻找二进制转换?

double result = Double.longBitsToDouble(15552451L);

这将为您double提供与long文字相同的位模式。

在这里,二进制或十六进制文字会派上用场。这里有些例子。

double nan = Double.longBitsToDouble(0xfff0000000000001L);
double positiveInfinity = Double.longBitsToDouble(0x7ff0000000000000L);
double positiveInfinity = Double.longBitsToDouble(0xfff0000000000000L);

(请参见Double.longBitsToDouble(long)

您还可以long通过

long bits = Double.doubleToRawLongBits(Double.NaN);

(请参见Double.doubleToRawLongBits(double)


这还有其他作用,请参见jdoc(docs.oracle.com/javase/6/docs/api/java/lang/…
Jiri Kremser

是。但他没有具体说明如何他想转换longdouble(我觉得铸造是你使用Java时候学会的第一件事)他也没有接受任何的答案。也许他想获得一个doublelong值相同的位模式。好吧,我不知道。所以我给出了答案。
pvorb

我添加了其他信息,因此答案更有价值。
2013年

3
Long i = 1000000;
String s = i + "";
Double d = Double.parseDouble(s);
Float f = Float.parseFloat(s);

这样,我们可以很容易地将Long类型转换为Double或Float或Int,因为将字符串值转换为Double或Float或Int很容易。


2
最好在要发布的代码中添加一个解释作为答案,以帮助访问者理解为什么这是一个很好的答案。
abarisone

1

长约会是什么意思类型?

您可以将long转换为double:

double d = (double) 15552451L;

我猜很长的约会时间可能是“ 9月19日,星期二24893243092333”。
Teemu Leisti 2013年

1

您可以尝试如下操作:

long x = somevalue;

double y = Double.longBitsToDouble(x);

0

我认为这对你有好处。

BigDecimal.valueOf([LONG_VALUE]).doubleValue()

这个代码怎么样?:D

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.