A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© adison 黑马帝   /  2012-3-25 01:53  /  1960 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 adison 于 2012-3-25 01:55 编辑

练习:给定一个小数,要求保留小数点的后两位。正常思路应该是这样:1.将指定小数乘以100,然后四舍五入2.再将其除以100后返回。但当出现特殊情况,如:当小数点后第二位为0并且第三位小于5时,本应该输出xx.x0,但结果却输出xx.x,我用String类的split方法算是解决了这个问题,但觉得挺麻烦,不知有没更好的办法,乞求高手指点

class MathDemo
{   
        public static void main(String[] args)
        {               
                                 /*特殊情况*/        
                                //double d=3.1016;  //小数点后第二位为0并且第三位小于5               
                                  double d=3.1966;  //小数点后第二位为9并且第三位大于5                 
                              //double d=0.00025; //整数部分和小数后三位全为0(没写判断条件,都差不多,判断条件太长,看起来不爽)               
                                 sop(math(d));  
        }
        public static String math(double d)
        {  
                /*将指定小数乘以100,然后四舍五入*/
                double d1=Math.round(d*100);

        /*通过String的split方法获取小数点后第二位和第三位*/       
                          String s =new Double(d).toString();
                String[] str=s.split("\\.");
                String[] str1=str[1].split("");

        /*满足条件,数值除以100,再在末尾加一个"0",因为要保留两位小数*/               
                              if (str1[2].equals("0")&&Integer.parseInt(str1[3])<5||str1[2].equals("9")&&Integer.parseInt(str1[3])>=5)
                     return d1/100+"0";

                return new Double(d1/100).toString();
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}
               

2 个回复

倒序浏览
格式化
java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");  
df.format(你要格式化的数字);
回复 使用道具 举报
田斌 发表于 2012-3-25 03:27
格式化
java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");  
df.format(你要格式化 ...

我就是一直找一个格式化方法,感谢了,不过貌似格式应该是"0.00",不然第三种情况出来的结果不对
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马