java中double类型显示两个小数,比如12.00

来源:互联网 发布:淘宝宝贝综合排名 编辑:程序博客网 时间:2024/06/04 19:06

本在载自:http://blog.csdn.net/chaozhidan/article/details/8161862

Double类型的数据如何保留两位小数?
各位大虾,现有Double类型的数据,如何转换为保留两位小数的数,返回值的类型仍然是Double类型的,而不是字符串类型。 
比如     0,返回“0.00”; 

提示:DecimalFormat       df       =       new       DecimalFormat( "#####0.00 ");      
                System.out.println(df.format(d));     
这段代码能够将Double类型的数据设置指保留两位,但是返回的是String类型,要让返回Double类型的,怎么办?

------解决方案--------------------------------------------------------

首先你要搞明白,什么是模型,什么是展现。 

既然“客户的需求是希望能将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。
BigDecimal rateDecimal = new BigDecimal(12);//12是一个double类型

BigDecimal  num=rateDecimal.setScale(1, BigDecimal.ROUND_HALF_UP);

num是12.00;用BigDecimal来帮助显示后面的零

 

ROUND_CEILING  
大于等于该数的那个最近值

ROUND_DOWN  
正数是小于等于该数的那个最近数,负数是大于等于该数的那个最近数

ROUND_FLOOR  
小于等于该数的那个值

ROUND_HALF_DOWN  
五舍六入

ROUND_HALF_EVEN  
向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP ,如果是偶数,使用ROUND_HALF_DOWN  


ROUND_HALF_UP  
四舍五入

ROUND_UNNECESSARY  
计算结果是精确的,不需要舍入模式  

ROUND_UP  
和ROUND_DOWN相反

0 0