int f=(int)(A*100+0.5);
double F=(double)f/100;为什么这样输出的F就是能去到小数点2位的呢?

解决方案 »

  1.   

    int f
    中就已经把小数的部分给去掉了啊。
    再转回来也不会提高精度的。
      

  2.   

    public static void main(String[] args) {
    //没损失精度的
    double g=(1.211111*100+0.5);
    System.out.println("g====="+g);
    double G = g/100;
    System.out.println("G====="+G);
    //下面是损失精度后的
    int f=(int)(1.211111*100+0.5);
    System.out.println("f====="+f);
    double F=(double)f/100;
    System.out.println("F====="+F);
    }
    结果是
    g=====121.61110000000001
    G=====1.2161110000000002
    f=====121
    F=====1.21
      

  3.   

    LZ可以参考一下下面的代码
    import java.math.RoundingMode;
    import java.text.NumberFormat;public class Test3 {
    public static void main(String[] args) {
    System.out.println(function2(123.455, 2));
    System.out.println(function2(123.449, 2));
    System.out.println(function2(123.44, 3));
    System.out.println(function2(123.4455, 3));
    System.out.println(function2(123.4499, 3));
    System.out.println(function2(123.9, 0));
    }
    /**
     * 
     * @param value  要进行四舍五入的数字
     * @param decimalPlaces   要保留的小数点位数,如果最后一位是0 则不显示
     * @return
     */
    public static double function2(double value, int decimalPlaces) {
    NumberFormat nf = NumberFormat.getNumberInstance();
    nf.setRoundingMode(RoundingMode.HALF_UP); // 四舍五入
    nf.setMaximumFractionDigits(decimalPlaces);
    nf.setMinimumFractionDigits(decimalPlaces);
    return Double.valueOf(nf.format(value));
    }}