Java String型数字比较问题

String s1 = "4";
String s2 = "4.0";
用double型Double.valueOf(s1) == Double.valueOf(s2)为什么为false?
用什么方法比较s1和s2比较好?
ps:环境为myeclipse。
这样比貌似存在精度问题,如果用Double.valueOf(s1) - Double.valueOf(s2)的方法判断的话结果却不等于0

/*

 * To change this template, choose Tools | Templates

 * and open the template in the editor.

 */

package debug_java;


/**

 *

 * @author chujiangke

 */

public class Debug_java {


    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        // TODO code application logic here 

String s1 = "4";

String s2 = "4.0";

if(Double.valueOf(s1).equals( Double.valueOf(s2)))

    System.out.printf("there are equel");

else 

    System.out.printf("there are not equel");

        

    }

}


追问

虽然阁下结果正确图文并茂,但是时间上差了一些,所以就不采纳了,仍然很感谢你的回答

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-15
可以使用 Double.equals(Double)方法,Double.valueOf(s1).equas(Double.valueOf(s2))的结果是true.
如果比较大小,使用Double.compareTo(Double)方法,Double.valueOf(s1).compareTo(Double.valueOf(s2)),如果s1大,结果为1。如果S2大,结果为-1。如果相等,结果为0.
第2个回答  2013-07-15
Double.valueOf(s1) 和 Double.valueOf(s2)的返回类型是Double的实例,也就是基本数据类型double的包装类的引用,==比较两个不同引用返回肯定是false。
你可以试试
double d1 = Double.valueOf(s1) ;
double d2 = Double.valueOf(s2);
System.out.println(d1==d2);这就是true了,比较的是值,不关精度的事。
比较s1和s2用s1.equals(s2)比较值,==还是比较引用。
第3个回答  推荐于2017-09-14
1、不能使用“==”,要使用equals
2、结果判断是0可以的,不知道为啥你的不相等

public class test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String s1 = "4";
String s2 = "4.0";
//第一种方式,采用与0.0比较
if((Double.valueOf(s1)-Double.valueOf(s2)) == 0) {
System.out.println("equal");
}
//第二种方式,采用equals方法
System.out.println(Double.valueOf(s1).equals(Double.valueOf(s2)));
}

}本回答被提问者采纳
相似回答