黑马程序员技术交流社区

标题: 关于Math中的一个小练习 [打印本页]

作者: adison    时间: 2012-3-25 01:53
标题: 关于Math中的一个小练习
本帖最后由 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);
        }
}
               
作者: 田斌    时间: 2012-3-25 03:27
格式化
java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");  
df.format(你要格式化的数字);
作者: adison    时间: 2012-3-25 12:02
田斌 发表于 2012-3-25 03:27
格式化
java.text.DecimalFormat   df   =new   java.text.DecimalFormat("#.00");  
df.format(你要格式化 ...

我就是一直找一个格式化方法,感谢了,不过貌似格式应该是"0.00",不然第三种情况出来的结果不对




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2