`
pangyi
  • 浏览: 33653 次
  • 性别: Icon_minigender_1
  • 来自: 古城西安
社区版块
存档分类
最新评论

Java连续乘法遇到的问题

阅读更多
采用 JDK 1.6_13版本,发现一个奇怪的问题。

    long period =30* 24 * 60 * 60 * 1000;
   System.out.println("30 * 24 * 60 * 60 * 1000="+period);


执行,输出结果非常可怕。

JDK 1.6 输出结果:

30 * 24 * 60 * 60 * 1000=-1702967296
 


JDK 1.5 输出结果:
30 * 24 * 60 * 60 * 1000=-1702967296
 



难道是Java的BUG吗?我很难相信,Java在处理这么简单的事情,居然会有BUG。

我将以上测试代码,稍微调整之后,如下
long period = 24 * 60 * 60 * 1000;
System.out.println("24 * 60 * 60 * 1000=" + period);
period *= 30;
System.out.println("30 * 24 * 60 * 60 * 1000=" + period);


JDK1.6输出如下结果:
24 * 60 * 60 * 1000=86400000
30 * 24 * 60 * 60 * 1000=2592000000


JDK1.5输出如下结果:
24 * 60 * 60 * 1000=86400000
30 * 24 * 60 * 60 * 1000=2592000000


调整后,Java的处理结果完全正确。


再次调整代码,如下:
long period = 30l * 24 * 60 * 60 * 1000;
System.out.println("30l * 24 * 60 * 60 * 1000=" + period);


输出:
30l * 24 * 60 * 60 * 1000=2592000000


输出结果正确。

总结如下:

    Java在处理连续乘法或除法时,最好注明数字的类型,否则可能会得到不正确的结果。

  



分享到:
评论
6 楼 抛出异常的爱 2010-04-03  
BigDicmal
5 楼 waterdh 2010-04-02  
纠正下1楼,int最大值是2^31-1
4 楼 healer_kx 2009-08-13  
溢出嘛,用大整数类型的classes...要不换Scala,书写起来还漂亮点。
3 楼 pangyi 2009-07-13  
呵呵!让各位见笑了!

以前没注意过这方面。

是我错怪Java了。
2 楼 不复记忆 2009-07-12  
溢出了,兄台.....
1 楼 QuakeWang 2009-07-12  
默认是Integer,超过了最大值2^31,溢出了

相关推荐

    java 计算器(可连续计算)

    在这个“java 计算器(可连续计算)”项目中,我们可以看到几个关键的类: 1. `Computer.java`:这个类很可能是主程序,它可能包含了用户输入的处理和后缀表达式求值的核心逻辑。可能会有一个方法用于接收用户的输入...

    java实现简易计算器

    2. **解析输入**:程序需要能够解析用户的输入,将连续的字符流转化为可执行的数学表达式。这通常涉及到字符串处理和正则表达式。 3. **计算逻辑**:这部分代码处理数学运算,包括加法、减法、乘法、除法,以及可能...

    经典算法Java实现

    3. 哈希查找:通过哈希函数快速定位目标,但可能遇到哈希冲突问题。 三、图算法 1. 广度优先搜索(BFS):用于遍历或搜索树或图,按层进行访问。 2. 深度优先搜索(DFS):沿着某一条路径深入搜索,直至无法继续,...

    JAVA上百实例源码以及开源项目源代码

    像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...

    堆栈实现的java计算器

    遇到右括号“)”,连续弹出栈顶操作符直至遇到左括号,然后将这一对括号内的计算结果压回堆栈。 3. 当遍历完所有字符后,栈中应仅剩一个元素,即最终的计算结果。 这个过程涉及到了栈的应用、字符处理、优先级判断...

    基于Java图形用户界面的计算器

    5. **运算符优先级**: 计算器需要处理运算符的优先级问题,例如,乘法和除法先于加法和减法执行。这通常通过栈(stack)数据结构实现,运算符被压入栈中,遇到较高优先级的运算符时,会弹出栈顶元素进行计算。 6. *...

    java计算器的实现--ppt课件

    Java计算器的实现是一个经典的编程练习,它涉及到基本的编程概念,如输入/输出处理、条件判断、循环控制以及算术运算。...通过深入学习和实践,不仅可以掌握Java语言,还能锻炼解决问题的能力和逻辑思维。

    java代码-九九乘法表

    在九九乘法表中,`print`方法可能用于连续输出数字,而`println`用于在每行结束时换行。 3. **数组**: - 数组是一种数据结构,用于存储相同类型的多个元素。虽然在这个例子中不一定使用数组,但理解如何创建和...

    Java小程序_计算器

    在这个计算器程序中,我们可能会遇到整型(int)和浮点型(float/double)数据类型,用于存储计算结果。例如,我们可以声明变量`int num1`, `int num2`来存储两个操作数。 2. **用户输入** 在Java中,用户输入通常...

    java_calculator实现

    遍历运算子集合,优先运算乘法和除法(遇到乘法除法的时候,移除运算子,并计算) * 4.之后剩下的就是加法和减法,依次遍历计算 * 5.如果有括号的情况,递归调用 * 计算的核心思路 * 从运算子集合中取出一个运算子 * ...

    算符优先算法(Java)

    4. **处理左结合和右结合**:对于左结合的运算符,如加法和乘法,当栈顶运算符优先级等于当前运算符时,需要连续弹出栈顶运算符直到栈顶运算符优先级低于当前运算符。对于右结合的运算符,如赋值运算符,处理方式略...

    java Gui 做的计算器

    本项目“java Gui 做的计算器”就是利用Java的Swing或JavaFX库来实现一个基本的计算器应用,它具备了计算器的基础运算功能,包括加法、减法、乘法、除法以及一些辅助操作,如取反数、清零和退格等。 首先,我们需要...

    Java 计算器 代码

    通过这个项目,初学者可以全面了解Java编程的基本元素,同时提高解决问题和逻辑思维的能力。随着对Java和GUI编程的理解加深,可以进一步优化代码结构,使用更高级的技术,如多线程、 Swing/AWT的高级特性等。

    计算器 Java课程设计

    7. **实验报告**:实验报告应包括设计的目标、所采用的技术、代码结构分析、遇到的问题及解决方案,以及对项目的反思和改进建议。这部分可以帮助学生总结学习成果,提升问题解决能力。 通过这个Java课程设计,学生...

    java仿Windows计算器

    5. **异常处理**:在执行计算过程中,可能会遇到除以零或输入非法字符的情况,需要捕获这些异常并给出友好的提示信息。 6. **格式化显示**:为了保持计算器的用户体验,计算结果显示需要进行适当的格式化。例如,...

    Java实现的小型计算器(仿Windows计算器)

    这个计算器程序具备基本的数学运算能力,包括加法、减法、乘法、除法、开根号以及取余数,而且允许用户进行连续运算,无需在每次操作后手动输入新的数字或运算符。 首先,我们需要了解Java编程的基础。Java是一种跨...

    基于Java的卡尔曼滤波器设计与实现

    在实际项目中,可能会遇到非线性问题。这时,可以使用扩展卡尔曼滤波(EKF)或者无迹卡尔曼滤波(UKF)来处理。扩展卡尔曼滤波是通过线性化非线性系统来近似应用卡尔曼滤波,而无迹卡尔曼滤波则采用随机采样方法来...

    java小游戏课程设计

    通过这个项目,学生可以复习Java语言的基础知识,如类、对象、方法、变量等,并学习如何将这些理论知识应用于实际问题的解决。 课程设计的目标主要有三个方面:一是复习和巩固Java语言的基础知识,二是提供动手实践...

    用java做的计算器程序

    这个名为"Calculator"的程序很可能包含了一个或多个类,这些类实现了基本的数学运算,如加法、减法、乘法和除法。下面将详细讨论涉及的知识点。 1. **Java基础知识**: - **类与对象**:计算器程序通常会定义一个`...

Global site tag (gtag.js) - Google Analytics