我有这个代码:
static def parseString(String inputRow, Particle particle) {
def map = inputRow.split()
particle.mass = map[0].toDouble()
particle.x = map[1].toDouble()
particle.y = map[2].toDouble()
}
Run Code Online (Sandbox Code Playgroud)
而这个测试代码:
static final inputRow = "1 -5.2 3.8"
def particle1 = new Particle()
def "string should be parsed into particles"() {
when:
RepulsionForce.parseString(inputRow, particle1);
then:
particle1.mass == 1
particle1.x == -5.2
particle1.y == 3.8
}
Run Code Online (Sandbox Code Playgroud)
上述测试按原样通过; 但是,当我将parseString代码更改为以下代码时:
static def parseString(String inputRow, Particle particle) {
def map = inputRow.split()
particle.mass = map[0].toFloat()
particle.x = map[1].toFloat()
particle.y = map[2].toFloat()
}
Run Code Online (Sandbox Code Playgroud)
相同的测试失败并出现此错误:
Condition not satisfied:
particle1.x == -5.2
| | |
| | false
| -5.2
Particle@a548695
Run Code Online (Sandbox Code Playgroud)
默认情况下,-5.2在Groovy中是BigDecimal,因此您要将BigDecimal与Float对象进行比较.这些传递:
def a = -5.2
def b = "-5.2".toFloat()
assert a != b
assert a.getClass() == BigDecimal
assert b.getClass() == Float
assert a.toFloat() == b
Run Code Online (Sandbox Code Playgroud)
Groovy接受BigDecimal和Double之间的比较:
def g = -5.2
def h = "-5.2".toDouble()
assert g == h
assert g.getClass() == BigDecimal
assert h.getClass() == Double
Run Code Online (Sandbox Code Playgroud)
如果你需要做一些需要精确的计算,你可能会更好地使用BigDecimal,因为它们保留了它(虽然性能成本)
def c = -5.2
def d = "-5.2".toBigDecimal()
assert c == d
assert c.getClass() == BigDecimal
assert d.getClass() == BigDecimal
Run Code Online (Sandbox Code Playgroud)
否则,根据@Tim的评论,使用a -5.2f,所以对Float对象进行比较:
def e = -5.2f
def f = "-5.2".toFloat()
assert e == f
assert e.getClass() == Float
assert f.getClass() == Float
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5462 次 |
| 最近记录: |