【问题标题】:Java Math type castingJava 数学类型转换
【发布时间】:2017-05-02 00:00:07
【问题描述】:

所以我有以下程序:

import java.lang.Math;

public class Test{
    public static void main(String[] args) {
        int value = (int)Math.pow(11,11);
        System.out.println(value);
    }
}

我想打印 11 的 11 次幂的整数值。我知道 Math.pow(11,11) 会返回一个双精度值 2.85311670611E11,这是正确的。但是当我将它输入到 int 时,我会得到 2147483647,这显然是不正确的。

那么为什么会这样呢?我该如何解决?

谢谢

【问题讨论】:

  • 这是int 类型可以存储的最大值。你期待什么?还有,你是什么意思我该如何解决它
  • 计算值超过时显示Int的最大值。只需使用不同的原始类型。 long
  • @Ousmane Many Diaw 我期待 285311670611 是 11 的 11 次方。那么这是否意味着我不能使用 int 呢?
  • @Amir 使用long 类型,这将为您提供285311670611 的结果。将来在使用int 类型时收到关于溢出或下溢的通知,这样做 --> int value = Math.toIntExact((long)Math.pow(11,11));
  • 了解计算机如何处理数字类型和操作数(包括整数和浮点数)对于程序员来说至关重要。在本案例中研究二进制补码 32 位和 64 位整数表示。

标签: java math casting


【解决方案1】:

对于这种情况,您必须使用 Long。

int,作为有符号整数,如果它是无符号的,则只能是一个最大为 2^32 的数字,或者是 32 位数字,换句话说,它的限制是从 0 到 2,147,483,647,它只给你一个限制。

尝试使用 Long 对象,即 2^64,它会给你正确的答案。

【讨论】:

    【解决方案2】:

    这是int 类型的上限,你可以使用long 代替,或者在java.math.BigInteger 中尝试BigInteger,它永远不会溢出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多