本帖最后由 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);
}
}
|
|