谁能写一个函数,来对一个浮点数进行小数位取舍:
    根据我传入的参数值,来决定我保留小数点后多少位。例如我输入3,则保留小数点后3位,第4位则进行四舍五入。看看谁写的函数最精妙!谢谢各位勇于参与!!!!!!

解决方案 »

  1.   

    /**
         * 提供精确的小数位四舍五入处理。     * @param v 需要四舍五入的数字     * @param scale 小数点后保留几位     * @return 四舍五入后的结果     */    public static double round(double v, int scale)
        {        if (scale < 0)
            {            throw new IllegalArgumentException(                "The scale must be a positive integer or zero");        }        BigDecimal b = new BigDecimal(Double.toString(v));        BigDecimal one = new BigDecimal("1");        return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();    }
      

  2.   

    当然是你写的最精妙我写的话要么用 DecimalFormat,要么用最原始的 (int)(x*10^n+0.5)*1.0/10^n的方法了
      

  3.   

    hehe, 两位大师已经给出经典答案了,下面谁要再说话,可真得“勇于参与”了  ^_^
      

  4.   

    BigDecimal b = new BigDecimal(Double.toString(v));     BigDecimal one = new BigDecimal("1");     return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    是利用什么方法啊,作用是什么啊。能描述详细一点吗?我想多了解一下原理谢谢
      

  5.   

    public static double r(double d, int i)
    {
    double dd = d * Math.pow(10, i);

    dd = Math.round(dd);

    dd = dd / Math.pow(10, i);

    return dd;
    }
      

  6.   

    改造了一下/**
     * 提供精确的小数位四舍五入处理。
     * 
     * @param v
     *            需要四舍五入的数字
     * 
     * @param scale
     *            小数点后保留几位
     * 
     * @return 四舍五入后的结果(字符串)
     * 
     */ public static String round(double v, int scale) {
    if (scale < 0) {
    throw new IllegalArgumentException(
    "The scale must be a positive integer or zero");
    }
    BigDecimal b = new BigDecimal(Double.toString(v));
    BigDecimal one = new BigDecimal("1");
    DecimalFormat df1 = new DecimalFormat("0.##########");
    double t=b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    return df1.format(t).toString();
    }