double型的变量a和b进行取余运算。
如果,直接用[a%b]进行运算的话,得到的结果存在误差。
例如:10.0%0.1=0.09999999999999945(正确的结果是0.1)
如果我想得到正确的结果,我应该怎么写代码?
如果,直接用[a%b]进行运算的话,得到的结果存在误差。
例如:10.0%0.1=0.09999999999999945(正确的结果是0.1)
如果我想得到正确的结果,我应该怎么写代码?
BigDecimal num2 = new BigDecimal("0.1");
System.out.println(num1.remainder(num2));构造函数记得用BigDecimal(String)
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();
}
PS:浮点值不适合用来进行精度计算,你可以使用BigDecimal类,这个是专门用于做精确计算的。