首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

跨入JAVA江湖一个月,一直不明白为什么这样会损失精度?各位大叔大妈速来指教指教

2013-03-10 
踏入JAVA江湖一个月,一直不明白为什么这样会损失精度?各位大叔大妈速来指教指教为啥会损失精度呢?[解决办

踏入JAVA江湖一个月,一直不明白为什么这样会损失精度?各位大叔大妈速来指教指教


为啥会损失精度呢?
[解决办法]
在java中,byte类型的数据实质上是按照int类型存储的,byte ab = (byte) (a+b);这样才对,否则你的程序无法通过编译,其实不存在什么精度损失。
[解决办法]
byte占一字节,int占4字节,byte型的数据在参与运算时会自动转换成int型,这是Java中的规定。
在a+b的时候,a和b已经都偷偷转换成int型了,所以它们相加得到的和也是int型的。
因为int比byte型占的字节数多,能够表示的精度高,所以当你试图将(a+b)这个int值赋值给byte型的ab时,系统担心会损失精度,因此编译无法通过。除非你这样写:(byte) (a + b)
这样系统认为你已经考虑到了丢失精度的风险,也就是说,你在向系统打保证:“哥心里清楚这样写没问题!”,然后系统就放心了,允许编译通过。
这下明白了吧……

热点排行