java double转string

来源:互联网 发布:邵阳学院教务网络系统 编辑:程序博客网 时间:2024/06/07 08:26

Java中,double转string可以用Double.toString(d)的方式。但是,这种方式有隐藏的坑,请大家看仔细了:

package hello;public class DoubleToString {    public static void test1(double dou) {        String dou_str = Double.toString(dou);        if (dou_str.equals("20160101")) {            System.out.println("YES!");        } else {            System.out.println("NO!");        }    }    public static void main(String[] args) {        double dou = 20160101;        test1(dou);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

当运行上述代码以后,控制台华丽丽地输出:

NO
  • 1
  • 1

我们在第六行后面打印出dou_str:

2.0160101E7
  • 1
  • 1

原来jvm这货将double用科学计数法表示了double,怪不得转成string以后变了样。。。

将上面代码修改如下:

package hello;import java.text.NumberFormat;public class DoubleToString {    public static void test2(double dou) {        Double dou_obj = new Double(dou);        NumberFormat nf = NumberFormat.getInstance();        nf.setGroupingUsed(false);        String dou_str = nf.format(dou_obj);        System.out.println("dou_str is:" + dou_str);        if (dou_str.equals("20160101")) {            System.out.println("YES!");        } else {            System.out.println("NO!");        }    }    public static void main(String[] args) {        double dou = 20160101;        test2(dou);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

再运行,再输出,这下就OK了:

dou_str is:20160101YES!
0 0