精确取余的问题 double型的变量a和b进行取余运算。如果,直接用[a%b]进行运算的话,得到的结果存在误差。例如:10.0%0.1=0.09999999999999945(正确的结果是0.1)如果我想得到正确的结果,我应该怎么写代码? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 BigDecimal num1 = new BigDecimal("10.0");BigDecimal num2 = new BigDecimal("0.1");System.out.println(num1.remainder(num2));构造函数记得用BigDecimal(String) 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(); } 同样的疑问。PS:浮点值不适合用来进行精度计算,你可以使用BigDecimal类,这个是专门用于做精确计算的。 但是,使用c语言的fmod函数得到结果却是0.100000,为什么? 关于网络传输的问题?望个位大虾帮帮忙! 到底form中的action和web-xml中servlet配置有何联系?? 在线等个小问题 又来麻烦大家了,我今天突然就不能在命令提示符哪儿 编译 和运行 JAVA程序 strutd+hibernate 怎么实现分页 struts1.2和resin的bean拷贝问题 关于jar文件的问题? 关于打包 jar 自动生成的 MANIFEST文件 java中如何调用和控制flash 怎么连接不上数据库?大家帮我看看吧 关于异常的一点错误 关于java网络编程....
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类,这个是专门用于做精确计算的。