如何在Groovy中减去Integers并保留前导零?

时间:2011-06-11 16:16:39

标签: groovy

我有一个代码:

def a = 2111 - 1112
//which calculates a as 999.

但是在上面的结果中,我需要a0999,即我需要a中的前导零。我怎么能这样做?

3 个答案:

答案 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的第一个参数包含您想要的位数。