A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 403383221 中级黑马   /  2013-4-17 09:21  /  1164 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 403383221 于 2013-4-17 10:13 编辑

int a = 4000;
double b = (double)a/1000/100;
我想问的是,a是先转换成double型再运算呢,还是运算后再转换的?
而且,我如果这样写的话
int a = 4000;
double b = (float)a/1000/100;
System.out.println(b);
为啥结果是
0.03999999910593033

3 个回复

倒序浏览
首先,第一个,
肯定是先转换,因为“()”的原因,“()”优先级大于+、-、*、/。记着,以后写程序,不知道优先级怎么写优先级的时候,就直接用()就可以了,()是最优的
第二个
double 的有效位是14位
并且精度高于float
首先,float进行a的转换后,计算出来是0.04
这个时候,要将值赋值给b   float的类型就需要提升,但是在提升的过程中,就会损失精度。
回复 使用道具 举报
陈宇鹏 发表于 2013-4-17 10:02
首先,第一个,
肯定是先转换,因为“()”的原因,“()”优先级大于+、-、*、/。记着,以后写程序,不 ...

明白了,谢谢
回复 使用道具 举报
学习学习!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马