【问题标题】:Is there a Java Method that will return a doubled number? [duplicate]是否有返回双倍数字的 Java 方法? [复制]
【发布时间】:2014-11-12 22:19:06
【问题描述】:

我一直在查看Math 库,但似乎找不到将数字加倍并返回它的方法。

我需要一些可以做的事情num+=num

当然上述方法会起作用,但一旦数字变大,它就不再满足我的需要,即使我使用 long 而不是 int

或者是我需要更改的数据类型而不是方法?

我找到了解决办法。

 BigInteger num = new BigInteger("1");
 num = num.add(num);

在阅读有关 BigInteger 的信息时,它说它是不可变的,所以我认为它无法更改值。我想我需要更好地理解不可变。

【问题讨论】:

  • 它不再满足我的需要 您希望这种方法有何不同? (使用BigInteger。)
  • 或者使用double,这是我最初以为你在谈论的。 double n = 1.0; n *= 2.0;
  • @markspace double 怎么样?它会比 long 更快地失去精度

标签: java


【解决方案1】:

有 float、double、BigInteger 和 BigDecimal。

  • float 的精度低于 double

  • float AND double 都不是无限的

  • BigInteger 可以容纳无限大的值(只有整数,没有逗号!)

  • BigDecimal 与 BigInteger 相同,但逗号后也可以有小数,即 3.14

【讨论】:

    【解决方案2】:

    如果你使用双精度:

    Math.scalb(num, 1)
    

    【讨论】:

    • 使用位移的好主意:)
    【解决方案3】:
     BigInteger num = new BigInteger("1");
     num = num.add(num);
    

    【讨论】:

      【解决方案4】:

      这可能是我见过的第二个最琐碎的问题。

      public BigInteger doubleIt(BigInteger num)
      {
          return num.multiply(BigInteger.valueOf(2));
      }
      
      public BigDecimal doubleIt(BigDecimal num)
      {
          return num.multiply(BigDecimal.valueOf(2));
      }
      
      public double doubleIt(double num)
      {
          return num*2.0;
      }
      
      public long doubleIt(long num)
      {
          return num*2;
      }
      

      最琐碎的问题是here

      【讨论】:

      • 是的,因为双精度数具有无限精度...
      • @vanza 我没有声称任何这样的事情。 OP 可能想要一个无法用语言中的数据类型表示的结果,但这并不意味着他可以得到它。
      • 您可能想阅读他写的“随着数字变大”的部分...double 可以表示大数字,但在此过程中您会损失很多精度,因此您的解决方案是对他想要的东西有点没用。所以,并不像你建议的那么微不足道(尽管正确的答案确实有点微不足道)。
      猜你喜欢
      • 1970-01-01
      • 2014-03-26
      • 1970-01-01
      • 2014-03-02
      • 2012-10-31
      • 2013-03-30
      • 2013-01-08
      • 1970-01-01
      • 2019-04-26
      相关资源
      最近更新 更多