黑马程序员技术交流社区
标题:
运算顺序问题
[打印本页]
作者:
侯丛政
时间:
2013-2-16 15:27
标题:
运算顺序问题
float f = 3.1415926f;
System.out.println((int)(f*100)*1.0/100); // 结果是3.14, 但是不知道这个
(int)(f*100)*1.0/100
的运算顺序是怎么回事呢? 断点后也看不懂, 只能求救了.
作者:
铿锵科技
时间:
2013-2-16 16:05
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)); //这样输出的是浮点数除以整数的结果转为整数
作者:
黄玉昆
时间:
2013-2-16 18:28
class Test02
{
public static void main(String[] args)
{
float f = 3.1415925f;
//int x = (int)(f*100)*1.0/100;//报错:可能会损失精度,需要double型
int m = 3;
double n = (double)(m*100)*1.0/100;
System.out.println((f*100));//314.15924
System.out.println((int)(f*100));//314
System.out.println((int)(f*100)*1.0);//314.0
System.out.println((int)(f*100*1.0/100));//3
System.out.println((f*100)*1.0/100);//3.1415924072265624
System.out.println((int)(f*100)*1.0/100);//3.14
System.out.println(n);//3.0
}
}
复制代码
这是我的测试,可以看出,顺序如下:
执行顺序:(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.1415
925
f,但是打印结果却不一样,是314.15
924
和3.1415
924
072265624,
当改为3.1415
92
f或3.1415
921
f,结果为:3.1415
92
和3.1415
921
020507813,为什么5变4了,1变没了?正在研究中...........
作者:
刘策
时间:
2013-2-16 19:59
黄玉昆 发表于 2013-2-16 18:28
这是我的测试,可以看出,顺序如下:
执行顺序:(f*100) ------>(int)---> *1.0 ----->/100
得出结果: ...
好像和float 的精度,有效位,还有就是数据在计算中的存储有关吧,继续研究。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2