各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型。
比如  0,返回“0.00”;提示:DecimalFormat   df   =   new   DecimalFormat("#####0.00");   
        System.out.println(df.format(d));  
这段代码能够将Double类型的数据设置指保留两位,但是返回的是String类型,要让返回Double类型的,怎么办?

解决方案 »

  1.   

    晕啊!你知不知道,对于数型变量来说:0.00==0.0==0?
    如果想把0表示成0.00,那你就得用String,否则只能用BigDecimal。如果抛开所有"xxx.00"以及"xxx.x0"形式的数不说,那么用Math.ceil(x*100)/100就可以得到你要的效果了。如果需要四舍五入,那就是Math.ceil(x*100+.5)/100。
      

  2.   

    to:manbaum(砸锅上网) 
    感谢manbaum(砸锅上网)!但是你没有解决我的问题。
    对于非"xxx.00"以及"xxx.x0"类型的保留两位我已经实现了,现在的程序当为“0”显示的是"0.0",非0的保留两位,而客户的需求是希望能将0.0也显示为 0.00,所以有上面的问题。用字符串可以实现将0.0转换为字符串型“0.00”,但是这个字符串型“0.00”无法set到俺自定义的数据结构(这个是在自定义数据结构里的类型是Double类型的)里去,这样如何解决?
      

  3.   

    Double.parseDouble(String s);
      

  4.   

    TO: foxpeople007() 首先你要搞明白,什么是模型,什么是展现。既然“客户的需求是希望能将0.0也显示为 0.00”,那么客户并没有要求说“希望0在内部保存的时候也保存为0.00”,他要的只是展现。所以,不论你存成什么样,只要你能展现的时候转成他要的格式不就行了。如果你希望把一个0存储成0.00的形式,那我只好告诉你,只有string和bigdecimal可以选择,绝对不可能单纯用double实现。对double来说,0和0.00永远是一样的。如果你要问为什么,我可以告诉你,这样表示出来的数你才会觉得比较合乎你从小接受的数的概念,否则就会有点乱套。如果你有兴趣,可以仔细先看bigdecimal的javadoc,由于bigdecimal能分别表示0和0.0以及0.00等等,造成一个很怪的现象,就是,在bigdecimal的表示下:0.equals(0.0) 以及 0.equals(0.00) 都会返回假;同时,0.compareTo(0.0) 以及 0.compareTo(0.00) 却都会返回0。如果你不得不在你的模型里用string表示0.00,但你想转回为double类型的0参与运算,那么,楼上的已经给出了方法:Double.parseDouble(String)。
      

  5.   

    问题解决。感谢manbaum(砸锅上网) 。