Java中从Long到Double的转换

Java中从Long到Double的转换,java,type-conversion,Java,Type Conversion,有没有办法将Long数据类型转换为Double或Double 例如,我需要将15552451L转换为double数据类型。简单转换 double d = (double)15552451L; 你所说的长约会是什么意思 您可以将一个长的字符转换为双字符: double d = (double) 15552451L; 你可以简单地做: double d = (double)15552451L; 或者,您也可以从Long object中获得双倍: Long l = new Long(155524

有没有办法将
Long
数据类型转换为
Double
Double

例如,我需要将
15552451L
转换为
double
数据类型。

简单转换

double d = (double)15552451L;

你所说的长约会是什么意思

您可以将一个长的字符转换为双字符:

double d = (double) 15552451L;
你可以简单地做:

double d = (double)15552451L;
或者,您也可以从Long object中获得双倍:

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

你在找二进制转换吗

double result = Double.longBitsToDouble(15552451L);
这将为您提供与
long
文本具有相同位模式的
double

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

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

您还可以使用

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

(请参见)

您可以尝试以下方法:

long x = somevalue;

double y = Double.longBitsToDouble(x);

通过这种方式,我们可以毫无问题地将Long类型转换为Double、Float或Int,因为将字符串值转换为Double、Float或Int很容易。

如前所述,您可以简单地将Long转换为Double。但是在进行长到双的转换时要小心,因为长到双的转换在java中是一种缩小的转换

e、 g.以下程序将打印1而不是0

    long number = 499999999000000001L;
    double converted = (double) number;
    System.out.println( number - (long) converted);

我认为这对你有好处

BigDecimal.valueOf([LONG\u VALUE]).doubleValue()

这个代码怎么样?
:D

如果它只是一个文本
15552451d
我甚至认为不需要强制转换,您可以创建一个具有长值的double,如下所示:“double D=1234L;”。可能不需要。但是这个问题足够基本,可以保证引入类似强制转换的概念。不需要任何字符串解析:
long.valueOf(15552451L).doubleValue()
如果您想通过
Long
。请注意,在内部,这与从
双精度
中进行的转换相同,只是您正在执行一些自动/取消装箱操作。我执行了。解析字符串来执行此操作(现在已从答案中删除)将使性能降低许多数量级。拳击虽然不那么昂贵,但仍然值得避免,特别是在这样的情况下(使用
new
),拳击不能被忽略。我认为这个例子应该表明,你可以从Long->double中获得拳击。初始化时间的长短似乎不那么重要。假设答案中的示例经过编辑后看起来更合理。我坚持认为,通过字符串将值转换为double不是一种好的做法。我会认为这是相当没有争议的。你不需要显式地投下。它只是工作:
double d=15552451L我猜一个很长的日期应该是“9月19日星期二24893309233”。但是,他没有具体说明如何将
long
转换为
double
(我认为,使用Java时,铸造是您首先学会的事情之一),也没有接受任何答案。也许他想得到一个与
long
值具有相同位模式的
double
。嗯,我不知道。所以我只是给出了答案。我添加了额外的信息,因此答案更有价值。最好是在你发布的代码中添加一个解释,作为答案,这样可以帮助访问者理解为什么这是一个好答案。你的链接说的是相反的,从双到长是一个缩小的转换,而从长到双是扩大的转换
    long number = 499999999000000001L;
    double converted = (double) number;
    System.out.println( number - (long) converted);