日期:2014-05-20  浏览次数:20642 次

四舍五入的问题,高手抢分请进!!!
编写一个四舍五入的函数,要求可以保留到小数后面的任意一位(如3.1415997保留到小数点后第5位后得到3.14160)

double   number(double   d,   int   n)
{

for(int   i=0;   i <n;i++)
      d*=10;
d   =   Math.round(d);
for(int   i=0;i <n;i++)
      d/=10;
return   d;
}

这个算法会出现问题,应该是精度的问题吧。


哪位高手能给出个不用java.text.NumberFormat类和DecimalFormat类的算法,就只用简单的算法,最好只用lang包中的类,,可以么??????

分不够再加!!!

------解决方案--------------------
static double number(double d, int n)
{
double s1 = Math.pow(10, n);

d = Math.round(d*s1)/s1;

return d;
}
------解决方案--------------------
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMinimumFractionDigits(5); // 设置精确到小数点后5位
System.out.println(nf.format(3.1415997));

需import java.text.NumberFormat
------解决方案--------------------
转字符串,获取小数点位置
然后根据精度要求取指定位数的数字,如果大于4就前面位数+1,然后截取字符串
------解决方案--------------------
考虑到最后可能输出 "0 ",这样的方法只能输出为 String,而非 double 类型。