java的5条运算法则--哪些可能你不知道的出错

java的5条运算法则:

1.计算结果的数据类型,和最大类型一致
例如:

13/2;		
	--运算结果是1,因为32都是int类型,结果1.5也是int类型,
	不是double类型,这时就相当于取整,结果为1;23d/2;	
	--运算结果是1.5,其中3d的d指的是强转double类型,2int类型,
	由于double类型的字节比int大,而计算结果和最大类型一致,
	故结果1.5double类型;

2.byte,short,char比int的字节小,在运算的时候系统会自动转成int类型,并且返回int类型的结果
例如:

	byte a=1;
	a=a+1;//报错
	--会报错,因为右边byte类型的a和1运算时,会被系统转成int类型,并返回int类型
	在赋值给左边byte类型的a时,由于byte类型字节小,装不下int类型,故报错;
	--修改方法:将a=a+1;改成a=(byte)(a+1);
	其中(byte)(a+1)int类型结果强转成byte类型;
	byte a=1;
	a=(byte)(a+1);//正确

3.整数运算的溢出
例如:光速为300000km/s即是3亿m/s,计算1光年时,要注意溢出情况

	System.out.println(300000000*60*60*24*365)//输出结果不正确
	--因为int类型的取值范围是-2147483648~2147483647,简单记忆为-21亿~21亿,
	因此3亿乘于60就已经超出int范围溢出,溢出的过程可以看做在-21亿~21亿不断循环,
	故结果一定错误,拿错误的结果计算的结果也一定错误;
	--修改方法:将300000000*60*60*24*365改成300000000L*60*60*24*365
	其中L在第一位的意义是一开始就强转为long类型,可以满足之后的计算,
	如果在最后加L不好的地	方是可能前面int运算时就溢出,使结果错误了,
	再转成long类型还是错误;

4.浮点数运算的不精确
例如:

	System.out.println(1-0.7);
	//结果是0.30000000000000004
	System.out.println(4.15*100);
	//结果是415.00000000000006
	

5.浮点数运算的特殊值
例如:

	System.out.println(1.0/0);//结果是Infinity
	System.out.println(0.0/0.0);//结果是NaN
	--其中Infinity是无穷大
	--其中NaN是Not a Number,指不是数字, 
	NaN 用于处理计算中出现的错误情况,
	比如 0.0 除以 0.0 或者求负数的平方根。
	
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值