四舍五入的问题,高手抢分请进!!!
编写一个四舍五入的函数,要求可以保留到小数后面的任意一位(如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 类型。