减法时保持前导零

时间:2015-01-09 01:24:19

标签: java

我想知道如何在减去数字时保持领先0,特别是两个长数。

让我们说1000 - 0999 = 0001

我想保留答案。所以只是在前面添加0就不会起作用了。

有什么想法吗?

4 个答案:

答案 0 :(得分:6)

这是打印问题:

long n = 1000 - 999;
String s = String.format("%04d", n);  // 0001

更多信息:Formatter

答案 1 :(得分:2)

前导零只是标点符号。整个概念仅适用于应该表示数字的字符串。事实上,在你制作这样一个字符串之前,即使是“数字”的概念也毫无意义。

所以你真正的问题不是“在减去时如何保持前导零?”而是“在将结果格式化为字符串时如何获得前导零?”

因此,例如,要使用(至少)4位数字(带前导零)打印数字,您可以使用out.printf("%04d", theNumber)。或者在创建字符串时使用相同的格式说明符。

答案 2 :(得分:1)

正如@Sotirios Delimanolis所提到的,你不能用多头来做这件事。你需要使用一个字符串,因为longs不能在前面存储额外的零。试试这个:

public String subtractWithZeros(long number1, long number2){
    long result = number1 - number2;
    String strResult = String.valueOf(result);
    String strNum1 = String.valueOf(number1);
    String strNum2 = String.valueOf(number2);
    int totalLength = Math.max(strNum1.length(), strNum2.length());
    int numOfNeededZeros = totalLength - strResult.length();
    for(int i = 0;i<numOfNeededZeros;i++){
        strResult = "0" + strResult;
    }
    return strResult;
}

这应该返回一个你想要在前面的零的长。我假设减法的结果永远不会是负面的。

答案 3 :(得分:0)

虽然这不是这个[常见]问题的当代答案,但它是一种操纵“printf”和“format”参数的方法。

int number = 5_000;

int length = Integer.toString(number).length();

number -= 4_999;

System.out.printf("%0" + length + "d", number);

// result :  0001