我把数据类型改为float型,为什么运行加果不能抛出“错误”,而是“结果:infinity”。

来源:1-3 Java中通过案例学习 try...catch...finally

夜还没黑

2016-06-04 14:29

package com.test;


public class ThrowException {


public static void main(String[] args) {

ThrowException t=new ThrowException();

float result=t.divide();

System.out.println("结果:"+result);

}

public float divide(){

float result=100;

float divider=10;

try {

while(divider>0){

divider--;

result+=100/divider;

}

return result;

} catch (Exception e) {

System.out.println("错误");

return -1;

}


}



}



写回答 关注

3回答

  • 慕粉13802449518
    2016-06-04 15:57:00
    已采纳

    计算机的小数表示不是准确的,float和double类型的数都是近似的,当上面减到float为0时,其实际并不完全等于0,所以没有异常,且数字很小约为0,100/divider就为无穷

  • 慕粉3423541
    2016-06-04 15:44:20

    给你看两张图片

    575286ca00017eee03620498.jpg

    575286cb000169c904140326.jpg


  • BalanceLi
    2016-06-04 15:42:29

    你这个程序本身就没有会出现错误的地方啊,

    try {

    while(divider>0){

    divider--;

    result+=100/divider;

    }

    try块里面可能出现错误的地方就是divider=0,但代码写的是先判断再自减,因此divider最后一次取值就是1,循环就结束了,因此没有错误可捕获,当然就不会报错了。

    数据类型在这里也不会改变运行结果的,只会改变显示的结果,

    float result=t.divide(); 这时会显示infinity,因为除不尽所以算是无穷

    假如改成了 int result = (int)t.divide();  这时结果显示的就不是infinity了,会显示一个确定的数。

    因此数据类型不会影响try catch块。  真正能否捕获到异常是看是否有异常


    夜还没黑

    改为int型我知道可以抛出错误,我就是像探究下float型时,为何不能抛出错误的情况

    2016-06-05 09:48:45

    共 1 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409768 学习 · 4463 问题

查看课程

相似问题