0

我知道 double 可能不够精确。但是,我找不到使用 BigDecimal 的方法。我试过

while(Math.log10(Math.abs(a.subtract(new BigDecimal(1.41421356237309504880168872420969807856967187537694))) >= -50 || Math.log10(Math.abs(b.subtract(new BigDecimal(1.41421356237309504880168872420969807856967187537694)))) >= -50 )
{
    \\ stuff goes here
}

但它说我不能对 BigDecimals 使用 log 10 或绝对值。

4

1 回答 1

0
new BigDecimal(1.41421356237309504880168872420969807856967187537694)

1.414...一个双精度文字,因此在程序运行之前它会被截断为双精度。您需要将其作为字符串传递:

new BigDecimal("1.41421356237309504880168872420969807856967187537694")

至于比较,您应该能够使用以下内容:

if(a.subtract(new BigDecimal("1.41421356237309504880168872420969807856967187537694")).abs().scaleByPowerOfTen(50).doubleValue() < 1 || ...
于 2013-11-02T16:17:07.987 回答