黑马程序员技术交流社区
标题:
关于浮点数精度丢失问题
[打印本页]
作者:
z1342802487
时间:
2014-4-4 21:19
标题:
关于浮点数精度丢失问题
本帖最后由 z1342802487 于 2014-4-6 08:30 编辑
public class Doubledemo
{
public static void main(String[] args)
{
double a = 2.01;
double b = 3.02;
double d = 5.03;
boolean c = (a+b)==d;
System.out.println("a+b="+(a+b));
System.out.println("d==(a+b)"+c);
}
}
复制代码
会输出经下结果
a+b=5.029999999999999
d=5.03
d==(a+b)false
怎么会这样?怎么才能实现浮点数的高精度计算呢?
作者:
郝林杰
时间:
2014-4-4 22:03
浮点数(小数): double
1) double 是64位浮点数
2) 浮点数计算是不绝对精确的,有舍入误差
//所以double型的a+b=5.029999999999999(有舍入)
3) D、d是double后缀
/*a+b=5.029999999999999
*d=5.03!= 5.029999999999999 所以比较的结果会是false
*/
想要得到精度值用java.math.BigDecimal类:
BigDecimal用于描述一个大浮点数
描述的数字精度由内存上限决定
1)创建BigDecimal类 实例对象的方法有两种
a. BigDecimal d1=new BigDecimal("3.0");
b. BigDecimal d2=BigDecimal.valueOf(2.5);
2)BigDecimal有subtract,add,multiply,divide等方法
对于divide方法,通常要制定精度和舍入模式,否则当遇到无限小数时,
除法会一直进行下去直到抛出异常
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2