为什么在groovy中double原语是BigDecimal

为什么在groovy中double原语是BigDecimal,groovy,Groovy,我调用一个重载方法(assertThat),该方法有一个带有BigDecimal参数的签名和另一个带有double primitive参数的签名。 当我在groovy中启动这个代码段时,它调用了带有BigDecimal参数的代码段,而我希望调用双原语参数one double[] erreur = Seg.erreur(xtab, ytab, 0, 2) Assertions.assertThat(erreur[1]).isEqualTo(-0.3333333333333333) 有人能解释一下

我调用一个重载方法(assertThat),该方法有一个带有BigDecimal参数的签名和另一个带有double primitive参数的签名。 当我在groovy中启动这个代码段时,它调用了带有BigDecimal参数的代码段,而我希望调用双原语参数one

double[] erreur = Seg.erreur(xtab, ytab, 0, 2)
Assertions.assertThat(erreur[1]).isEqualTo(-0.3333333333333333)
有人能解释一下为什么吗?
提前感谢。

默认情况下,groovy中的十进制数是
BigDecimal
。如果您希望它是双精度的,您应该使用后缀
D
D

从文档中的:

assert 123.45 == new BigDecimal('123.45') // default BigDecimal type used
assert 1.200065D == new Double('1.200065')
您的
isEqualsTo()
正在传递一个BigDecimal作为参数,而您的
assertThat()
正在传递一个double。只需在
-0.3333
的末尾添加一个
d
,它就可以工作了:

import static org.assertj.core.api.Assertions.assertThat

class Doubles extends GroovyTestCase {

  void testAssertions() {
    double[] erreur = [0.1, -0.3333333333333333, 0.3]
    assertThat(erreur[1]).isEqualTo(-0.3333333333333333d)
  }

}

Assertions
junit吗?没有断言是AssertJ。