我有这段代码:
BigDecimal d = ...;
if (d.compareTo(Expression.PI) == 0) {
//do something
}
其中Expression.PI是保留到小数点后100位的圆周率。
但我不需要比较d是否与圆周率相等,只需要比较前20位。换句话说,如何检查d是否大致等于圆周率?
我尝试过
Expression.PI.setScale(20, RoundingMode.HALF_UP).compareTo(d.setScale(20, RoundingMode.HALF_UP)) == 0;
并且。
Expression.PI.setScale(20, RoundingMode.HALF_UP).compareTo(d) == 0;
但是这两种方法似乎都不起作用。我在这里做错了什么吗?
d
等于精确到小数点后 20 位的圆周率吗?首先,很难相信你需要那么高的精度。你可以尝试四舍五入到 5 位,看看会发生什么。 - lucasvw