居然1==0.9999999999和5!=4.999999999都成立??????!!!!!!!!!!!!!!! 这是cpu的精度问题,这不光是java特有的别的语言也有这个问题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1==(3*(1.0/3.0))你的比较运算有问题,在这里,java把3*(1.0/3.0)自动转换成int型,结果进位成了1。第二个也一样。 你试试这个:class My1{ public static void main(String[] args) { if(1.0==(3*(1.0/3.0))) { System.out.println("1.0==0.999999"); } else System.out.println("1.0!=0.999999"); }}class My{ public static void main(String[] args) { int d=0; while(d!=5) { d=d+(1.0/3.0); System.out.println(""+d); } }} 同意 bumaple(蓝枫) 的说法,看来你还是初学 还有,你仔细看书,float和double是不可以这样比较相等不相等的。具体的是关于float和double的存储形式的问题了。 程序语言的设计中:无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。 要比较这些数请使用java.math.BigDecimal 在数字后加上d表示是double类型,然后比较 这是cpu的精度问题请使用1-x<0.0000000000001这样的方法去判断两个浮点数是否相同 cpu的精度去看看这方面的介绍 myeclipse中能运行的JAVA代码在cmd中编译报错,如何在cmd中声明外部jar包? 流操作java.io.EOFException求解释 问个synchronized的问题 没分,求解,烦人的各种文档。 java.awt的button有没有方法设置为不可用 关于java的double类型的精度问题 一著名软件公司的java笔试算法题! linux下安装Sun ONE Studio的问题 tomcat低版本比高版本好?中文问题! 一道关于switch的题目 ******java里的日期,怎么实现?????****** 太菜了:怎么区分鼠标左右健
class My1
{
public static void main(String[] args)
{
if(1.0==(3*(1.0/3.0)))
{
System.out.println("1.0==0.999999");
}
else System.out.println("1.0!=0.999999");
}
}class My
{
public static void main(String[] args)
{
int d=0;
while(d!=5)
{
d=d+(1.0/3.0);
System.out.println(""+d);
}
}
}
java.math.BigDecimal
请使用1-x<0.0000000000001这样的方法去判断两个浮点数是否相同
去看看这方面的介绍