2015-01-09 57 views
0

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

比方说,1000 - 0999 = 0001

我想保持的答案很长的为好。所以只要在前面添加0就不会起作用。

有什么想法?

+8

你不能。将其格式化为“String”。 –

+0

如果使用'int'或'long'值,你*保持前导零。只是在打印价值时它们通常会被压制(而且无论如何你都不想看到它们)。 (OTOH,带有'float'和'double'值,你永远不会*保持前导零 - 甚至是第一个非零位。) –

+2

(你需要学习思考*的值*数字和它的*表示*作为两个不同的东西。) –

回答

6

这是一个打印问题:

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

更多信息:Formatter

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; 
} 

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

2

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

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

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

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