【发布时间】:2011-02-23 04:07:54
【问题描述】:
在 Java 中,浮点运算不能精确表示。例如这个java代码:
float a = 1.2;
float b= 3.0;
float c = a * b;
if(c == 3.6){
System.out.println("c is 3.6");
}
else {
System.out.println("c is not 3.6");
}
打印“c 不是 3.6”。
我对超过 3 位小数 (#.###) 的精度不感兴趣。我该如何处理这个问题来乘以浮点数并可靠地比较它们?
【问题讨论】:
-
声明浮点数如:
float a = 1.2f;和双精度数如double d = 1.2d;同样在你的 if 语句中:if(c == 3.6f) -
除了@bobah 的回答,我建议查看
Math.ulp()函数。 -
使用
BigDecimal进行浮动和双重操作。见link。
标签: java floating-point floating-accuracy