我有一个代码:
def a = 2111 - 1112
//which calculates a as 999.
但是在上面的结果中,我需要a
为0999
,即我需要a
中的前导零。我怎么能这样做?
答案 0 :(得分:5)
似乎应该有一个很多Groovy-er解决方案,但这是我能想到的最好的:
Integer.metaClass.sub = {
def padTo = Math.max(delegate.toString().length(), it.toString().length())
return (delegate - it).toString().padLeft(padTo, '0')
}
println 2111.sub(1112)
我怀疑你是否想要真正改变“ - ”运算符的行为,但是如果你这样做,我认为如果改变了String的metaClass.subtract并使用了“2111” - “1112”
答案 1 :(得分:4)
Groovy-er解决方案可能是:
Integer.metaClass.sub = { it, pad=[ "$it", "$delegate" ]*.length().max() ->
"${delegate - it}".padLeft( pad, '0' )
}
println 2111.sub( 1112 ) // default padding
println 2111.sub( 1112, 10 ) // pad to 10 chars
将打印:
0999
0000000999
答案 2 :(得分:4)
这是一个Java-y解决方案,但只需要1行写入,它可能是“预期”用法:
def a = 2111 - 1112
def formatted = String.format("%04d", a)
println "Number with leading zeroes: " + formatted //Prints 0999
String的第一个参数包含您想要的位数。