在Java中从Long转换为Double

Har*_*rry 82 java

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

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

YoK*_*YoK 122

你可以这样做:

double d = (double)15552451L;
Run Code Online (Sandbox Code Playgroud)

或者你可以从Long对象得到两倍:

    Long l = new Long(15552451L);
    double d = l.doubleValue();
Run Code Online (Sandbox Code Playgroud)

  • 不需要在那里解析任何字符串:`Long.valueOf(15552451L).doubleValue()`如果你想通过`Long`.请注意,这与内部相同,就像来自`double`的强制转换一样,除了你正在做一些自动/拆箱. (5认同)
  • 我做到了.解析字符串来执行此操作(现在已经在答案中编辑)将使性能降低许多数量级.拳击比较便宜,但仍然值得避免,特别是在这样的情况下(使用"新"),它不能被淘汰. (3认同)

Jim*_*som 19

简单的铸造?

double d = (double)15552451L;
Run Code Online (Sandbox Code Playgroud)

  • 我甚至认为没有必要使用强制转换,你可以用这样的长值创建一个double:"double d = 1234L;". (2认同)

Dee*_*eep 8

如前所述,您可以简单地将 long 转换为 double。但是要小心long 到 double 的转换,因为 long 到 double 是java 中的缩小转换

从 double 类型到 long 类型的转换需要从 64 位浮点值到 64 位整数表示的非平凡转换。根据实际运行时值,信息可能会丢失。

例如以下程序将打印 1 而不是 0

    long number = 499999999000000001L;
    double converted = (double) number;
    System.out.println( number - (long) converted);
Run Code Online (Sandbox Code Playgroud)

  • 您的链接说相反,*双到长*是缩小转换,而长到双是扩大 (3认同)

pvo*_*orb 5

您在寻找二进制转换吗?

double result = Double.longBitsToDouble(15552451L);
Run Code Online (Sandbox Code Playgroud)

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

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

double nan = Double.longBitsToDouble(0xfff0000000000001L);
double positiveInfinity = Double.longBitsToDouble(0x7ff0000000000000L);
double positiveInfinity = Double.longBitsToDouble(0xfff0000000000000L);
Run Code Online (Sandbox Code Playgroud)

(见Double.longBitsToDouble(long)

你也可以得到long背面

long bits = Double.doubleToRawLongBits(Double.NaN);
Run Code Online (Sandbox Code Playgroud)

(见Double.doubleToRawLongBits(double)