为什么双重原语是Groovy中的BigDecimal

时间:2014-12-09 10:48:38

标签: groovy

我调用一个重载方法(assertThat),它有一个带有BigDecimal参数的签名,另一个带有double原始参数。 当我在groovy中启动这个片段时,当我期望调用double原始参数时,它会调用带有BigDecimal参数的片段。

double[] erreur = Seg.erreur(xtab, ytab, 0, 2)
Assertions.assertThat(erreur[1]).isEqualTo(-0.3333333333333333)

有人可以解释我为什么吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

来自文档中的Number type suffixes

assert 123.45 == new BigDecimal('123.45') // default BigDecimal type used
assert 1.200065D == new Double('1.200065')

答案 1 :(得分:0)

您的isEqualsTo()正在传递BigDecimal作为参数,而您的assertThat()正在传递一个双精度数。只需在d的末尾添加-0.3333333333333333即可:

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)
  }

}