1==1.0? 我记得有一次面试,大概是这个题目,问双精度的数字比较问题,答案是不等于,因为精度问题,谁能启发一下,题目应该是什么,考查点是什么,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 显然不等,兄弟,现在是计算机事件,比较二者是不是 ==,首先也得比较类型啊,类型都不match,怎么可能相等呢? char byte short ->int->float->double->Sring 应该是把1转型为float,再比较的. System.out.println(1==1.0);你看看输出什么 应该是等的,它会自动的进行类型向上转换,int与float比较,int会自动转换为float型 这个问题挺麻烦的 int i = 1; float j = 1.0f; double k = 1.0; System.out.println(i == j); System.out.println(i == k); System.out.println(j == k); float l = 1.000000001f; double m = 1.000000001; System.out.println(i == l); System.out.println(i == m); System.out.println(l == m); 不过我想下面的代码就能说明问题了。int i = 1; float j = 1.0f; double k = 1.0; System.out.println(Integer.toHexString(i)); System.out.println(Float.toHexString(j)); System.out.println(Double.toHexString(k)); System.out.println(i == j); System.out.println(i == k); System.out.println(j == k); float l = 1.000000001f; double m = 1.000000001; System.out.println(Float.toHexString(l)); System.out.println(Double.toHexString(m)); System.out.println(i == l); System.out.println(i == m); System.out.println(l == m);输出10x1.0p00x1.0p0truetruetrue0x1.0p00x1.000000044b83p0truefalsefalse 就如12#所言 最好不要拿精度不一致的两个数进行比较 会有不确定的答案上面的1.0f和1.0 以及l和m 就能说明问题了 System.out.println(1==1.0);编译结果:true 1==1.0,在比较过程中会自动做类型转换,由于1和1.0都可以用二进制精确表示,所以结果为true;如果拿来比较的数字不能用二进制精确表示,则会返回false; short ->int->float->double->Sring 原来看到一本书上说过这点,浮点数不应该进行相等比较,因为其精度是不确定,如果一定需要比较相等,应当使用类似0.00009<d<1.00001方式确定其相等 出题的意思是(float)转换下 面试题可能是这样的? double num = 1.0; num /= 49; num *= 49;//这里意思是进行一些运算 System.out.println(num);//打出来是0.9999999999999999 System.out.println(num == 1);大概的意思应该是这样的了。所有精度问题的原因都是因为进行运算时做了取舍造成不准确/或者有些数本身就不能用double精确表示。 如果真要用double,比较大小的话就用这种方法咯 我怎么觉得是把float转换为INT再比较了,JAVA不是向高级转吗? java进行二元操作时,如果其中一个数是float类型,另外一个数会转换为float类型。 毫无疑问,他们是相等,虽然,类型不同,因为 int 与 float 比较时,int 类型首先也会传唤成float,最终还是float 与float 相比较大小,这与 float s=0.0;s=s+1 与 s+=1是 一样的问题 20楼是正确的。经过几次计算后,1.0有可能被变成1.000000007,这时是不相等的。所以浮点数应该这样比较是否相等:0.999999 <d <1.00001 包括原始类型float ==int int ==double int ==longequals()都是false; 根据 JVM specifications 说的,JVM只提供对int和浮点型的instructions。之间的操作要么转为int要么转为浮点型。 急,关于JtextField传递数据问题 请教关于代理的问题 如何用JAVA编写词法分析器程序 大侠帮忙哦!!java怎么解析语音文件au格式啊? 求用IE启动小程序启动失败的解决方法 在使用jdbc就行sql数据库编程的时候的问题 如何应用javadoc生成api html文件 有一个数据库的问题? 初学JAVA,请问各位哪本数据结构(JAVA版)比较好? about string [swing]定制边框? 新鲜出炉的“俄罗斯方块”,欢迎大家下载试玩!
兄弟,现在是计算机事件,比较二者是不是 ==,首先也得比较类型啊,类型都不match,怎么可能相等呢?
int i = 1;
float j = 1.0f;
double k = 1.0;
System.out.println(i == j);
System.out.println(i == k);
System.out.println(j == k);
float l = 1.000000001f;
double m = 1.000000001;
System.out.println(i == l);
System.out.println(i == m);
System.out.println(l == m);
float j = 1.0f;
double k = 1.0;
System.out.println(Integer.toHexString(i));
System.out.println(Float.toHexString(j));
System.out.println(Double.toHexString(k));
System.out.println(i == j);
System.out.println(i == k);
System.out.println(j == k);
float l = 1.000000001f;
double m = 1.000000001;
System.out.println(Float.toHexString(l));
System.out.println(Double.toHexString(m));
System.out.println(i == l);
System.out.println(i == m);
System.out.println(l == m);输出1
0x1.0p0
0x1.0p0
true
true
true
0x1.0p0
0x1.000000044b83p0
true
false
false
编译结果:true
由于1和1.0都可以用二进制精确表示,所以结果为true;
如果拿来比较的数字不能用二进制精确表示,则会返回false;
double num = 1.0;
num /= 49;
num *= 49;//这里意思是进行一些运算
System.out.println(num);//打出来是0.9999999999999999
System.out.println(num == 1);
大概的意思应该是这样的了。
所有精度问题的原因都是因为进行运算时做了取舍造成不准确/或者有些数本身就不能用double精确表示。
如果真要用double,比较大小的话就用这种方法咯
毫无疑问,他们是相等,虽然,类型不同,因为 int 与 float 比较时,int 类型首先也会传唤成float,
最终还是float 与float 相比较大小,这与 float s=0.0;s=s+1 与 s+=1是 一样的问题
20楼是正确的。
经过几次计算后,1.0有可能被变成1.000000007,这时是不相等的。
所以浮点数应该这样比较是否相等:0.999999 <d <1.00001
float ==int
int ==double
int ==long
equals()
都是false;