关于强制转换的一个问题?

tedi3231 2003-11-28 05:35:37
public class app
{
public static void aaa(int a,int b) throws Exception

{
double c=(double)a/b;
System.out.println(a+"/"+b+"="+c);
}

public static void main(String args[])
{
try
{
aaa(4,0);
}
catch(Exception e)
{
System.out.println(e+"exception");
}
finally
{
try
{aaa(4,5);}
catch(Exception e)
{System.out.println("sdjfas;f");}
}

System.out.println("The main method is end");
}
}

如上面一个程序,如果我在aaa中:double c=(double)a/b;
则不会抛出异常,结果显示为:
4/0=Infnity
4/5=0.8 ……
但是如果是:int c=a/b;
则会抛出异常,请问这是什么原因啊?
...全文
63 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
danceflash 2003-12-04
  • 打赏
  • 举报
回复
看了一下ArithmeticException地说明:
Thrown when an exceptional arithmetic condition has occurred. For example, an integer "divide by zero" throws an instance of this class.

它强调了整数除0抛出例外
YuLimin 2003-11-29
  • 打赏
  • 举报
回复
浮点数的赋值是带有小数点的数字缺省是double型的,如果在浮点数后面加f或者F则是float,后面加d或者D则是double,科学计数法形式的浮点数也是double型的,而double的精度比float高,将一个高精度的double赋值给一个低精度的float时需要进行强制类型转换,反之则不需要。
tedi3231 2003-11-29
  • 打赏
  • 举报
回复
谢了
各位高手
RedMay 2003-11-29
  • 打赏
  • 举报
回复
首先明确一点,double是对a生效,而不是对a/b生效,否则要表达为(double)(a/b);第二,JAVA中的浮点运算中有三个特殊的值:
正无穷大---------Double.POSTIVE_INFINITY 正数被0除就是这个常量!!!
负无穷大---------Double.NEGATIVE_INFINITY
非数字-----------Double.NaN

我认为零就是零,没什么近似不近似的,任何进制都能表达,也不是0.1!!
当(double)a后,要做除法时,b的类型会先隐式转换int-->double,这样转化成浮点运算,既然是double浮点运算就不会抛出异常,因为以上说的3个特殊常量有定义。但是你要做int c=a/b就不行了,本身就都是整型,你除0算什么啊?!!
gordn 2003-11-28
  • 打赏
  • 举报
回复
当java中的类型转换属于缩小转换时,必须使用类型强制转换,如果你改成(int)(a/b) ,就没事了。这样,会把小数点部分截断。
要不你就想你前面做的那样。让表达式类型提升,全部提升成double类型。那样也不会错。
truezerg 2003-11-28
  • 打赏
  • 举报
回复
有顺序的。

对于float转int或double转int等都是不能转的。 而反过来可以。
0.8当然不能转成int
sysmaster 2003-11-28
  • 打赏
  • 举报
回复
同意楼上的
danceflash 2003-11-28
  • 打赏
  • 举报
回复
好像double的0不是一个真正意义上的0,而是一个近似于0的非0值
xieshuen 2003-11-28
  • 打赏
  • 举报
回复
你上面说4/5=0.8是吧!
想想你的c定义成整型,而a/b的结果却是浮点型。
很明显类型有问题你可把a/b的答案先转换成整型再试试看一下如何?
tedi3231 2003-11-28
  • 打赏
  • 举报
回复
可是到底为什么会是这样啊
Yanbin_Q 2003-11-28
  • 打赏
  • 举报
回复
0和0.0是有区别的。
danceflash 2003-11-28
  • 打赏
  • 举报
回复
还真没见过呢
是不是因为整型的0是纯0,而浮点型的0是近似0?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧