【问题标题】:Conversion from Long to Double in JavaJava中从Long到Double的转换
【发布时间】:2011-04-13 02:17:21
【问题描述】:

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

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

【问题讨论】:

    标签: java type-conversion


    【解决方案1】:

    简单的铸造?

    double d = (double)15552451L;
    

    【讨论】:

    • 如果它是一个字面量,只是15552451d
    • 我什至认为不需要强制转换,您可以创建一个具有长值的双精度,如下所示:“double d = 1234L;”。
    • 可能不是——但这个问题足够基本,足以保证引入像铸造这样的概念。
    【解决方案2】:

    长日期类型是什么意思?

    您可以将 long 转换为 double:

    double d = (double) 15552451L;
    

    【讨论】:

    • 我猜长日期应该是“星期二,9 月 19 日 24893243092333”。
    【解决方案3】:

    你可以这样做:

    double d = (double)15552451L;
    

    或者你可以从 Long 对象中得到 double :

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

    【讨论】:

    • 那里不需要任何字符串解析:Long.valueOf(15552451L).doubleValue(),如果你想通过Long。请注意,在内部,这与来自 double 的演员表相同,只是您正在进行一些自动/拆箱。
    • 我做到了。解析一个字符串来执行此操作(现在已从答案中删除)会使性能降低许多数量级。拳击的成本较低,但仍然值得避免,尤其是在这种无法消除的情况下(使用new)。
    • 我认为该示例应该表明您可以从 Long -> double 中获得。 Long 的初始化方式似乎并不重要..
    • 授予答案中的示例现在经过编辑看起来更合理。我认为通过字符串从值转换为双精度并不是一个好习惯。我会认为这是相当没有争议的。
    • 您不需要显式转换。它只是工作:double d = 15552451L;
    【解决方案4】:

    您在寻找二进制转换吗?

    double result = Double.longBitsToDouble(15552451L);
    

    这将为您提供与提供的long 具有相同位模式的double

    在这里,二进制或十六进制文字会派上用场。以下是一些示例。

    double nan = Double.longBitsToDouble(0xfff0000000000001L);
    double positiveInfinity = Double.longBitsToDouble(0x7ff0000000000000L);
    double negativeInfinity = 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/…)
    • 是的。但他没有具体说明如何long 转换为double(我认为强制转换是您在使用Java 时学习的第一件事),也没有接受任何答案。也许他想得到一个与long 值具有相同位模式的double。嗯,我不知道。所以我只是给出了答案。
    • 我添加了附加信息,所以答案更有价值。
    【解决方案5】:

    你可以试试这样的:

    long x = somevalue;
    
    double y = Double.longBitsToDouble(x);
    

    【讨论】:

      【解决方案6】:
      Long i = 1000000;
      String s = i + "";
      Double d = Double.parseDouble(s);
      Float f = Float.parseFloat(s);
      

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

      【讨论】:

      • 最好在您发布的代码中添加解释作为答案,这样可以帮助访问者理解为什么这是一个好的答案。
      【解决方案7】:

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

      Conversion from type double to type long requires a nontrivial translation from a 64-bit floating-point value to the 64-bit integer representation. Depending on the actual run-time value, information may be lost.

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

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

      【讨论】:

      • 你的链接说反了,double to long 是缩小转换,而 long to double 是扩大
      【解决方案8】:

      我认为这对你有好处。

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

      这段代码怎么样? :D

      【讨论】:

        猜你喜欢
        • 2014-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        • 2019-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多