【发布时间】: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 位整数表示。