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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 侯丛政 中级黑马   /  2013-2-16 15:27  /  1613 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

float f = 3.1415926f;
System.out.println((int)(f*100)*1.0/100); //  结果是3.14, 但是不知道这个(int)(f*100)*1.0/100的运算顺序是怎么回事呢? 断点后也看不懂, 只能求救了.

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

3 个回复

倒序浏览
float f = 3.1415926f;

System.out.println((((int)(f*100/*执行1*/)/*执行2*/)*1.0/*执行3*/)/100/*最后除以100*/);//按数字顺序执行
System.out.println((int)((f*100)*1.0)/100); //这样输出的是整数除法的结果
System.out.println((int)((f*100)*1.0/100)); //这样输出的是浮点数除以整数的结果转为整数

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
  1. class Test02
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 float f = 3.1415925f;
  6.                 //int x = (int)(f*100)*1.0/100;//报错:可能会损失精度,需要double型
  7.                 int m = 3;
  8.                 double n = (double)(m*100)*1.0/100;
  9.                 System.out.println((f*100));//314.15924
  10.                 System.out.println((int)(f*100));//314
  11.                 System.out.println((int)(f*100)*1.0);//314.0
  12.                 System.out.println((int)(f*100*1.0/100));//3
  13.                 System.out.println((f*100)*1.0/100);//3.1415924072265624
  14.                 System.out.println((int)(f*100)*1.0/100);//3.14
  15.                 System.out.println(n);//3.0
  16.         }
  17. }
复制代码
这是我的测试,可以看出,顺序如下:
执行顺序:(f*100)   ------>(int)--->  *1.0  ----->/100
得出结果:314.15924       314       314.0           3.14
结果已经很明显了,在这里括号的优先级是最高的,先运算,所以结果是3.14,那为什么最后结果不是int型呢,我认为用println打印,这里是可以接收任何打印的结果的,也就是说你运算的结果为double型,它也照打不误。
其中我又测试了两中类型转换方式,为什么定义的int的x就会报错呢,是因为double的精度最好,比int范围要大,简单说,double是可以装下int的。
所以,综合看出,打印3.14是没什么疑问了。
在此,我也遇到了一个问题,定义的f是3.1415925f,但是打印结果却不一样,是314.15924和3.1415924072265624,
当改为3.141592f或3.1415921f,结果为:3.141592和3.1415921020507813,为什么5变4了,1变没了?正在研究中...........
回复 使用道具 举报
黄玉昆 发表于 2013-2-16 18:28
这是我的测试,可以看出,顺序如下:
执行顺序:(f*100)   ------>(int)--->  *1.0  ----->/100
得出结果: ...

好像和float 的精度,有效位,还有就是数据在计算中的存储有关吧,继续研究。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马