【问题标题】:Convert a Double to long without loosing the exact value在不丢失确切值的情况下将 Double 转换为 long
【发布时间】:2013-11-21 00:02:11
【问题描述】:

我有一个 Double 对象,它在转换为 long 值时会丢失确切的值。

Double d = 1.14*100

System.out.println(d.longValue());

上述语句将打印:113

我想打印114

谢谢

【问题讨论】:

  • 浮点数不准确。你要先四舍五入吗?
  • 请注意,您认为的 Double 值 114 实际上可能在内部是 113.99999999...,而您的代码最终只是截断了小数部分。正如 Tim S 建议的那样,您需要合并四舍五入。
  • 如果你想防止你的代码失去精度,你可能应该使用BigDecimal
  • 同意@Pshemo -- 除非有充分的理由使用Double,否则使用BigDecimal 会更好。

标签: java


【解决方案1】:

首先,double精确的。接下来,当double/float 转换为long/int 时,小数部分被删除(不四舍五入)。

要获得 最近的值,您需要将其 四舍五入

System.out.println(Math.round(d));

【讨论】:

    【解决方案2】:

    如果您正在寻找具有您期望值的整数/长值表示,您可以使用这个:

    Math.round(1.14 * 100)
    

    【讨论】:

      【解决方案3】:

      试试这个

      Long.parseLong( String.format( "%.0f",doublevalue ) ) ;
      

      【讨论】:

        【解决方案4】:

        如果您需要准确的 114 值,请使用 Math.round

        double d = 1.14*100;
        System.out.println(Math.round(d));
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-12-31
          • 2020-09-04
          • 2019-10-30
          • 2012-04-14
          • 2015-01-10
          • 2013-12-07
          • 1970-01-01
          相关资源
          最近更新 更多