Java String型数字比较问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");

        

   


追问

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

参考技术A 可以使用 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.
参考技术B 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)比较值,==还是比较引用。
参考技术C 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)));


本回答被提问者采纳

以上是关于Java String型数字比较问题的主要内容,如果未能解决你的问题,请参考以下文章

Java中 两个double型数字相乘的问题,想不明白是怎么回事

java中,String字符串转化为数字

java如何把str型变为int型 就是我要把一个str型的数据和一个int型的数据比较大小

java使用数字类型注意事项

C/C++基本问题:字符串转化为long型数字

Java将int型数组转为String型数组