Groovy If-else和速记符号的行为不同

Groovy If-else和速记符号的行为不同,groovy,Groovy,我面临着一个我无法解决的问题 我有一个浮点数。如果小数部分为0,我希望返回一个整数,否则应返回原始浮点数。 以下if-else正确工作并返回20 def sampleNumber = 20.0 if(sampleNumber == Math.round(sampleNumber)) return sampleNumber as int else return sampleNumber as float 然而,这是行不通的。返回20.0 def sampleNumber = 20.0 retur

我面临着一个我无法解决的问题

我有一个浮点数。如果小数部分为0,我希望返回一个整数,否则应返回原始浮点数。 以下if-else正确工作并返回20

def sampleNumber = 20.0
if(sampleNumber == Math.round(sampleNumber)) return sampleNumber as int
else return sampleNumber as float
然而,这是行不通的。返回20.0

def sampleNumber = 20.0
return sampleNumber == Math.round(sampleNumber)? sampleNumber as int : 
sampleNumber as float

有人能告诉我我的代码有什么问题吗?

看起来像是
,因为float
应用于整个表达式。但这没有多大意义:如果我把两个表达式都放在括号里,例如

return (sampleNumber == Math.round(sampleNumber)) ? 
    (sampleNumber as int) : 
    (sampleNumber as float)
它仍然不能像你所期望的那样工作。我找到的唯一有效解决方案是使用
.toInteger()
.toFloat()
方法:

return (sampleNumber == Math.round(sampleNumber)) ? 
    sampleNumber.toInteger() : 
    sampleNumber.toFloat()
如果从第一个示例中删除
作为float
,并返回例如类似字符串的
'float'
,则
sampleNumber作为int
将返回您期望的结果。我要调查一下,找出这种奇怪行为的确切原因