当前位置: 首页 > 面试题库 >

为什么我的Java数学错误?

微生毅然
2023-03-14
问题内容

在下面的代码中,我看不出T1和T3有什么不同。当然我的计算器说不是。

public class longTest {
    public static final long T1 = 24 * 60 * 60 * 1000 * 30;
    public static final long T2 = 24 * 60 * 60 * 1000;
    public static final long T3 = T2 * 30;

    public static void main(String[] args) {

        System.out.println(T1);
        System.out.println(T2);
        System.out.println(T3);
    }
}

那么为什么我得到以下输出:

-1702967296
86400000
2592000000

在此示例程序中也不只是System.out.println。当我在日食中有T1并将鼠标悬停在变量上时,我得到一个光泽,显示相同的值。

Java版本“ 1.6.0_33” OSX


问题答案:

正如偏执的android所说,这是一个int溢出问题。要了解为什么T3不同,请参见下文。

public static final long T1 = 24 * 60 * 60 * 1000 * 30;

这里的所有数字都是ints,所以这与

public static final long T1 = (long) (24 * 60 * 60 * 1000 * 30);

int部分溢出,所以隐式转换为long到达太晚的精度避免丢失。在

public static final long T2 = 24 * 60 * 60 * 1000;

您具有相同的参数,但是数量较少,可以同时int容纳32位(正值为31位)和64位long

public static final long T3 = T2 * 30;

这与64位算术相乘longint因此它具有不同的值。
相当于

public static final long T3 = T2 * (long) 30;

long这里的隐式方法足够早以防止精度损失。



 类似资料:
  • 错误在第16行: 找不到符号 符号:方法子列表(int,int) 位置:int[]类型的变量nums

  • 对于这样一个陈词滥调的问题我很抱歉,但我真的不知道为什么我的CNN没有进步。 我正在训练一个美国有线电视新闻网的SVHN数据集(一位数)与32x32的图像。 对于预处理,我将RGB转换为灰度,并通过标准化对所有像素数据进行规格化。因此,数据范围变为(-1,1)。为了验证我的和是否正确对应,我从中随机选取了一个图像,并从中选取了一个具有相同索引的标签,这表明它们是正确的。 以下是我的代码(Keras

  • 今天在写demo的是有使用Assert.asserEquals(3,result);一直报错 按道理我已经引入断言对象,但还是报错 Junit5.4 版本不支持这样写吗? 有没有大佬知道呢?

  • 我想检查一个数字是否是正方形,一个数字是否是三角形。问题发生在sqrt(num)上,它为我测试的所有数字返回0 我正在使用一个在线编译器,尝试了几个编译器,所以这不是一个编译问题。尝试将num声明为double和int,结果相同 我是Java新手,但对编程并不陌生,我在网上搜索了几次,检查了我的代码,一切看起来都很好,在添加用于检查三角数的变量之前,它甚至按预期工作,但在声明变量checkTri和

  • 问题内容: 我在使用JMockit(1.21)模拟时遇到问题。请参阅以下内容,以简化我的实际课程。基本上我在我的代码中使用了某个地方,我希望对其进行模拟。 至于我的测试代码,此测试有效。 该测试失败。 我收到的错误消息: 我可以嘲笑像其他系统类和这样的,但只是似乎没有工作(也没有为此事)。我知道如何规避这是我的考验,所以我没有受到任何阻碍,但我不明白为什么不能嘲笑。删除Expectations块将

  • Python 越来越火爆 Python 在诞生之初,因为其功能不好,运转功率低,不支持多核,根本没有并发性可言,在计算功能不那么好的年代,一直没有火爆起来,甚至很多人根本不知道有这门语言。 随着时代的发展,物理硬件功能不断提高,而软件的复杂性也不断增大,开发效率越来越被企业重视。因此就有了不一样的声音,在软件开发的初始阶段,性能并没有开发效率重要,没必然为了节省不到 1ms 的时间却让开发量增加好