Groovy If-else和速记符号的行为不同
我面临着一个我无法解决的问题 我有一个浮点数。如果小数部分为0,我希望返回一个整数,否则应返回原始浮点数。 以下if-else正确工作并返回20Groovy 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
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
将返回您期望的结果。我要调查一下,找出这种奇怪行为的确切原因