double型的变量a和b进行取余运算。
如果,直接用[a%b]进行运算的话,得到的结果存在误差。
例如:10.0%0.1=0.09999999999999945(正确的结果是0.1)
如果我想得到正确的结果,我应该怎么写代码?

解决方案 »

  1.   

    BigDecimal num1 = new BigDecimal("10.0");
    BigDecimal num2 = new BigDecimal("0.1");
    System.out.println(num1.remainder(num2));构造函数记得用BigDecimal(String)
      

  2.   

    public static void main(String[] args){
            System.out.println(round(10.0,0.1,3));
        }
        /**
         * @param num 除数
         * @param div 被除数
         * @param scale 小数点后保留几位
         * @return 四舍五入的结果
         */
        public static double round(double num, double div,int scale){
             double reuslt=num%div;
             System.out.println(reuslt);
             BigDecimal bd=new BigDecimal(Double.toString(reuslt));
             BigDecimal one=new BigDecimal("1");
             return bd.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
        }
      

  3.   

    同样的疑问。
    PS:浮点值不适合用来进行精度计算,你可以使用BigDecimal类,这个是专门用于做精确计算的。
      

  4.   

    但是,使用c语言的fmod函数得到结果却是0.100000,为什么?